Anticipation
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 47 sur 63.
Une caméra pointée vers une cible en mouvement montre autant l’endroit d’où elle vient que celui vers lequel elle se dirige. Vise plutôt un point devant elle : la position de la cible plus sa vitesse multipliée par un temps d’anticipation en secondes. Cette caméra sur un support à côté d’un circuit automobile pivote pour suivre la voiture et vise un point situé une demi-seconde devant elle :
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}À 20 unités par seconde, le point visé se trouve à 10 unités devant la voiture ; à 4 unités par seconde, il se trouve à 2 unités devant elle, et une voiture à l’arrêt est visée directement. La vitesse correspond au mouvement réel de la voiture, donc le point se trouve au bon endroit en cas de dérapage ou de marche arrière. transform.forward ne conviendrait pas : l’axe avant d’une voiture qui recule pointe dans la direction opposée à celle où elle va, et l’axe avant d’une balle qui roule tourne avec elle.
Une caméra de suivi peut aussi anticiper : elle cadre un point devant sa cible plutôt que la cible elle-même. Quand ce point peut basculer de l’autre côté, comme lorsque le joueur fait demi-tour, modifie légèrement l’anticipation à chaque image ; sinon, toute la vue saute d’un coup.
Défi
MoyenCette vue latérale suit le coureur le long de l’axe x (les flèches le font courir à gauche et à droite). Faites en sorte que la caméra montre davantage la direction dans laquelle le coureur se dirige :
- La caméra se place à
ahead(3) unités devant le coureur le long de l’axe x, du côté vers lequel le coureur s’est déplacé en dernier. Avant le premier déplacement du coureur, elle est centrée sur lui. - Lorsque le coureur fait demi-tour, l’avance glisse de l’autre côté à
shiftSpeed(4) unités par seconde au lieu de sauter. - Lorsque le coureur s’arrête, la caméra conserve son avance.
- Les coordonnées y et z de la caméra restent inchangées.
Appuyez sur Play, courez dans les deux sens, puis appuyez sur Check.
Essayez vous-même
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Place la caméra ahead unités devant le joueur dans la direction de son dernier déplacement, en la faisant glisser à la vitesse shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
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