Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Fai in modo che il giocatore faccia volare la telecamera intorno alla torre.

  1. In Update(), le frecce destra e sinistra modificano yaw con la velocità turnSpeed, mentre le frecce su e giù modificano pitch con la velocità tiltSpeed, moltiplicate per Time.deltaTime.
  2. Poi mantieni pitch = Mathf.Clamp(pitch, 10f, 60f);.
  3. In LateUpdate(), imposta transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, poi transform.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

Esercitati da solo: Playground Unity