Telecamera orbitale
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 48 di 71.
Per ruotare attorno a un punto, mantieni un angolo, ruota di questo angolo un offset fisso e aggiungi il risultato al punto. La rotazione applicata al vettore effettua la rotazione: Quaternion.Euler(0, angle, 0) * offset fa ruotare l’offset attorno all’asse y, mantenendone invariati lunghezza e altezza. Questa telecamera ruota attorno a una statua a 20 gradi al secondo, restando sempre 3 unità più in alto e a 6 unità di distanza:
public Transform statue;
public float speed = 20f;
float angle;
void LateUpdate()
{
angle += speed * Time.deltaTime;
Vector3 offset = new Vector3(0, 3, -6);
transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
transform.LookAt(statue);
}Con un angolo pari a 0, l’offset è (0, 3, -6), quindi la telecamera si trova dietro la statua. Con 90 è (-6, 3, 0), sul lato -x della statua, e con 180 è (0, 3, 6), davanti. Spostare la telecamera non la fa ruotare, quindi LookAt la orienta di nuovo verso la statua da ogni nuova posizione.
Un secondo angolo solleva la telecamera: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) inclina verso l’alto la direzione all’indietro di pitch (una rotazione positiva attorno a x inclina (0, 0, -1) verso l’alto) e poi la ruota attorno di yaw, così la telecamera resta a distance di distanza a qualsiasi angolo.
L’angolo è memorizzato in un campo personalizzato, come negli angoli di Eulero: può superare 360 o scendere sotto 0 senza salti, e puoi limitarlo o modificarlo dalla tastiera. Eseguire questa operazione in LateUpdate() posiziona la telecamera dopo che la statua, o un giocatore, si è spostata durante il fotogramma.
Sfida
MedioFai in modo che il giocatore faccia volare la telecamera intorno alla torre.
- In
Update(), le frecce destra e sinistra modificanoyawcon la velocitàturnSpeed, mentre le frecce su e giù modificanopitchcon la velocitàtiltSpeed, moltiplicate perTime.deltaTime. - Poi mantieni
pitch = Mathf.Clamp(pitch, 10f, 60f);. - In
LateUpdate(), impostatransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, poitransform.LookAt(target);.
Premi «Gioca» e vola intorno alla torre. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 8f;
public float turnSpeed = 90f;
public float tiltSpeed = 45f;
public float yaw = 0f;
public float pitch = 30f;
void Update()
{
// Le frecce modificano yaw e pitch.
}
void LateUpdate()
{
// Posiziona la telecamera intorno a target e puntala verso di esso.
}
}
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere8La telecamera
Inseguimento fluidoTelecamera orbitaleSguardo in avantiVibrazione della telecameraRipasso: telecamera d'inseguimentoEsercitati da solo: Playground Unity