Menu
CoddyTech

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.

challenge icon

Défi

Moyen

L’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.
    }
}
quiz iconTestez-vous

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