Caméra orbitale
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 46 sur 63.
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 cette rotation : Quaternion.Euler(0, angle, 0) * offset fait pivoter 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);
}À l’angle 0, le décalage est (0, 3, -6), la caméra se trouve donc derrière la statue. À 90, il est (-6, 3, 0), du côté -x de la statue, et à 180, il est (0, 3, 6), devant. Déplacer la caméra ne la fait pas pivoter : LookAt la dirige donc vers la statue depuis chaque nouvelle position.
L’angle est stocké dans votre propre champ, comme dans les angles d’Euler : il peut dépasser 360 ou descendre en dessous de 0 sans saut, et vous pouvez le limiter ou le modifier depuis le clavier. Effectuer cela dans LateUpdate() place la caméra après le déplacement de la statue ou du joueur pendant la frame.
Défi
MoyenLaisse le joueur faire voler la caméra autour de la tour, toujours à distance (8) unités de la position de la tour et toujours tournée vers elle. Le script conserve deux angles dans yaw et pitch :
yawindique de combien la caméra a pivoté autour de la tour. La flèche droite l’augmente et la flèche gauche la diminue, à raison deturnSpeed(90) degrés par seconde. À yaw 0, la caméra se trouve du côté -z de la tour ; à yaw 90, elle se trouve du côté -x.pitchindique de combien de degrés la caméra est élevée au-dessus du niveau de la tour, vue depuis celle-ci. La flèche vers le haut l’augmente et la flèche vers le bas la diminue, à raison detiltSpeed(45) degrés par seconde, et elle reste comprise entre 10 et 60.
Elle commence à yaw 0 et pitch 30, ce qui la place à 4 unités au-dessus de la position de la tour et à 6.93 unités derrière celle-ci. Appuie sur Play, fais-la voler autour de la tour, puis appuie sur Check.
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 lui.
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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 à rebours2Collisions
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 poursuite