Menu
CoddyTech

Caméra orbitale

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 48 sur 71.

Pour tourner autour d’un point, conserve un angle, fais pivoter un décalage fixe de cet angle et ajoute le résultat au point. La multiplication d’un vecteur par une rotation effectue la rotation : Quaternion.Euler(0, angle, 0) * offset fait tourner le décalage autour de l’axe y, tandis que sa longueur et sa hauteur restent identiques. Cette caméra tourne autour d’une statue à 20 degrés par seconde, toujours à 3 unités de hauteur et à 6 unités de distance :

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);
}

Avec un angle de 0, le décalage est (0, 3, -6), donc la caméra se trouve derrière la statue. À 90, il est de (-6, 3, 0), du côté -x de la statue, et à 180, il est de (0, 3, 6), devant elle. Déplacer la caméra ne la fait pas pivoter : LookAt la dirige vers la statue depuis chaque nouvel emplacement.

Un deuxième angle élève la caméra : Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) fait pivoter la direction vers l’arrière vers le haut de pitch (une rotation positive autour de x incline (0, 0, -1) vers le haut), puis la fait pivoter de yaw autour de l’axe y. Ainsi, la caméra reste à une distance de distance, quel que soit l’angle.

L’angle est stocké dans ton propre champ, comme dans les angles d’Euler : il peut dépasser 360 ou descendre sous 0 sans à-coup, et tu peux le limiter ou le modifier à l’aide du clavier. En faisant cela dans LateUpdate(), tu places la caméra après le déplacement de la statue ou du joueur pendant cette image.

challenge icon

Défi

Moyen

Permets au joueur de faire voler la caméra autour de la tour.

  1. Dans Update(), les flèches droite et gauche modifient yaw à la vitesse turnSpeed, et les flèches haut et bas modifient pitch à la vitesse tiltSpeed, le tout multiplié par Time.deltaTime.
  2. Conserve ensuite pitch = Mathf.Clamp(pitch, 10f, 60f);.
  3. Dans LateUpdate(), définis transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, puis transform.LookAt(target);.

Appuie sur « Jouer » et fais voler la caméra autour de la tour. Puis appuie sur « Vérifier ».

Essayez vous-même

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()
    {
        // Les touches fléchées modifient yaw et pitch.
    }

    void LateUpdate()
    {
        // Place la caméra autour de target et oriente-la vers elle.
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity