Suivi fluide
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 45 sur 63.
Une caméra qui copie la position du joueur en lui ajoutant un décalage dans LateUpdate() transforme chaque secousse du joueur en secousse de la vue. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) renvoie une position qui se déplace vers target comme le ferait un ressort amorti : elle accélère, ralentit à mesure qu’elle s’approche de la cible et l’atteint sans la dépasser. Cette caméra suit le joueur depuis une position située 3 unités plus haut et 6 unités derrière, avec un léger retard :
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;
void LateUpdate()
{
Vector3 target = player.position + offset;
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}ref transmet à SmoothDamp la variable elle-même plutôt qu’une copie, afin que la méthode puisse la modifier. SmoothDamp conserve dans velocity la vitesse actuelle de la caméra sur les trois axes et en a besoin à la frame suivante, d’où le fait qu’il s’agisse d’un champ. Si elle était déclarée dans LateUpdate(), elle repartirait de zéro à chaque frame et la caméra avancerait à peine, parcourant environ un demi pour cent de la distance par frame. Pour un seul nombre, comme le zoom d’une caméra, Mathf.SmoothDamp fonctionne de la même façon avec une vitesse de type float.
smoothTime détermine le retard de la caméra : avec une valeur de 0.3, elle parcourt environ 60 % d’un déplacement soudain en 0.3 seconde et est presque arrivée après 1 seconde. Une valeur plus petite permet de suivre la cible de plus près. SmoothDamp lit Time.deltaTime lui-même, donc rien dans l’appel n’est multiplié par cette valeur.
Défi
MoyenLa caméra regarde le joueur d’en haut depuis une hauteur fixe. Fais-la le suivre en douceur avec Vector3.SmoothDamp et smoothTime (0.25), en se rapprochant de cet emplacement :
- x : le x du joueur ;
- z :
back(5) unités derrière le joueur, vers -z ; - y : toujours
height(12), quelle que soit la hauteur du joueur. La barre d’espace fait bondir le joueur, et la vue ne doit pas osciller.
Appuie sur Play, cours et bondis, puis appuie sur Check.
Essayez vous-même
using UnityEngine;
public class TopDownCamera : MonoBehaviour
{
public Transform player;
public float height = 12f;
public float back = 5f;
public float smoothTime = 0.25f;
void LateUpdate()
{
// Déplace doucement la caméra vers la position au-dessus du joueur (x), à back unités derrière lui (z), à une hauteur fixe.
}
}
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