Regardez dans la direction où vous vous déplacez
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 42 sur 63.
transform.LookAt a besoin d'un point à regarder. Souvent, ce que tu as, c'est plutôt une direction : une vitesse, le vent, la direction dans laquelle quelque chose s'est déplacé. Quaternion.LookRotation(direction) renvoie la rotation dont l'avant (la flèche bleue de l'axe z) pointe dans cette direction, tout en gardant le haut de l'objet orienté vers le haut du monde. Une flèche tirée dans les airs pointe d'abord vers le haut, puis bascule en tombant, car sa vitesse fait de même :
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}Seule la direction compte, pas la longueur : (1, 0, 2) et (3, 0, 6) donnent la même rotation. Un vecteur nul n'a pas de direction, donc LookRotation(Vector3.zero) affiche Look rotation viewing vector is zero et renvoie Quaternion.identity, ce qui fait pivoter brusquement l'objet pour qu'il soit orienté vers +z. C'est pourquoi la flèche vérifie d'abord : lorsqu'elle s'arrête, elle conserve son orientation. LookAt(target.position) donne la même rotation que LookRotation(target.position - transform.position).
La composante verticale de la direction fait basculer l'avant vers le haut ou le bas. Pour un objet qui doit rester droit, comme un marcheur qui monte une pente, définis d'abord y de la direction sur 0, afin que l'objet ne tourne qu'autour de y. Un deuxième argument, LookRotation(direction, Vector3.up), indique quelle direction correspond au haut ; Vector3.up est la valeur utilisée si tu ne le précises pas.
Défi
MoyenL’abeille vole de fleur en fleur. Le script Mover fourni la fait voler en ligne droite, en montant ou en plongeant en chemin, et la fait se reposer 1 seconde sur chaque fleur ; laisse Mover tel quel. Écris FaceMotion pour que l’abeille soit orientée dans la direction où elle vole :
- Elle est orientée dans la direction où elle s’est déplacée depuis la dernière image, vue de dessus.
- Elle reste droite : son nez ne pointe ni vers le haut ni vers le bas lorsqu’elle monte ou plonge.
- Pendant qu’elle se repose, elle conserve son orientation, et rien n’est journalisé.
Le code va dans LateUpdate(), donc Mover a déjà déplacé l’abeille pour cette image. Appuie sur Play, puis sur Check.
Essayez vous-même
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Oriente-toi dans la direction prise par l'abeille depuis la dernière image.
}
}
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 à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle2Collisions
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 à ramasser