Suivi fluide
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 47 sur 71.
Une caméra qui copie la position du joueur en y 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 rapproche de target comme le ferait un ressort amorti : elle accélère, ralentit à mesure qu’elle 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 au lieu d’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 à nouveau à la frame suivante, c’est pourquoi cette variable est un champ. Déclarée à l’intérieur de LateUpdate(), elle repartirait de zéro à chaque frame et la caméra avancerait à peine, d’environ un demi pour cent du trajet par frame. Pour un seul nombre, comme le zoom d’une caméra, Mathf.SmoothDamp fonctionne de la même manière avec une vitesse de type float.
smoothTime détermine le retard de la caméra : avec une valeur de 0.3, elle rattrape environ 60 % d’un saut soudain en 0.3 seconde et est presque arrivée au bout d’1 seconde. Une valeur plus petite permet un suivi plus serré. SmoothDamp lit lui-même Time.deltaTime, donc rien dans l’appel ne doit être multiplié par cette valeur.
Défi
MoyenFaites suivre le joueur par la caméra en douceur depuis une hauteur fixe.
- Ajoutez un champ
Vector3 velocity;. - Dans
LateUpdate(), construisezVector3 target = new Vector3(player.position.x, height, player.position.z - back);, afin qu’un saut ne déplace pas la vue. - Définissez
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);.
Appuyez sur « Jouer », courez et sautez : la caméra suit le joueur avec un léger retard et ne bouge jamais de haut en bas. Puis appuyez sur « Vérifier ».
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 le point situé au-dessus du joueur (x), à back unités derrière lui (z), à une hauteur fixe.
}
}
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