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.
Défi
MoyenPermets au joueur de faire voler la caméra autour de la tour.
- Dans
Update(), les flèches droite et gauche modifientyawà la vitesseturnSpeed, et les flèches haut et bas modifientpitchà la vitessetiltSpeed, le tout multiplié parTime.deltaTime. - Conserve ensuite
pitch = Mathf.Clamp(pitch, 10f, 60f);. - Dans
LateUpdate(), définistransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, puistransform.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
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle10Projet : Évasion de l’arène
L’arèneLes chasseurs2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser8La caméra
Suivi fluideCaméra orbitaleAnticipationTremblement de la caméraRécapitulatif : caméra de poursuite3Déclencheurs
Colliders déclencheursOnTriggerEnterObjets à ramasserLes caisses gardent le resteZones mortellesEntrée et sortieRécapitulatif : clé et porteEntraînez-vous par vous-même : Playground Unity