Telecamera orbitale
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 46 di 63.
Per ruotare attorno a un punto, mantieni un angolo, ruota un offset fisso usando quell’angolo e aggiungi il risultato al punto. La rotazione per il vettore esegue 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, sempre a 3 unità di altezza e a 6 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 di 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 punta di nuovo verso la statua da ogni nuova posizione.
L’angolo è memorizzato in un tuo campo, 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 è spostato nel frame.
Sfida
MedioFai volare il giocatore con la telecamera intorno alla torre, sempre a distance (8) unità dalla posizione della torre e sempre rivolta verso di essa. Lo script mantiene due angoli in yaw e pitch:
yawindica quanto la telecamera ha ruotato intorno alla torre. La freccia destra lo aumenta e la freccia sinistra lo diminuisce, aturnSpeed(90) gradi al secondo. Con yaw 0 la telecamera si trova sul lato -z della torre; con yaw 90 si trova sul lato -x.pitchindica di quanti gradi la telecamera è sollevata rispetto al livello della torre, vista dalla torre. La freccia su lo aumenta e la freccia giù lo diminuisce, atiltSpeed(45) gradi al secondo, e resta tra 10 e 60.
Parte da yaw 0 e pitch 30, posizione che la colloca 4 unità sopra la posizione della torre e 6.93 unità dietro di essa. Premi Gioca, 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 attorno a target e orientala verso di esso.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 rovescia2Collisioni
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'inseguimento