Regardez dans la direction où vous vous déplacez
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 44 sur 71.
transform.LookAt a besoin d'un point vers lequel regarder. Souvent, ce que tu as est plutôt une direction : une vélocité, le vent, la direction dans laquelle quelque chose s'est déplacé. Quaternion.LookRotation(direction) renvoie la rotation dont l'avant (la flèche z bleue) pointe dans cette direction, tout en maintenant le haut de l'objet orienté vers le haut du monde. Une flèche tirée en l'air pointe d'abord vers le haut, puis bascule en tombant, car sa vélocité 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 brusquement tourner l'objet vers +z. C'est pourquoi la flèche vérifie d'abord : une fois arrêtée, elle conserve l'orientation qu'elle avait. LookAt(target.position) donne la même rotation que LookRotation(target.position - transform.position).
La composante verticale de la direction incline l'avant vers le haut ou vers le bas. Pour un objet qui doit rester droit, comme un marcheur qui monte une pente, règle d'abord le 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 utilisé par défaut si tu ne le précises pas.
Défi
MoyenFais en sorte que l’abeille regarde dans la direction où elle vole, tout en restant droite.
- Dans
LateUpdate(), définisVector3 direction = transform.position - lastPosition;etdirection.y = 0;. - Uniquement lorsque
direction != Vector3.zero, définistransform.rotation = Quaternion.LookRotation(direction);, afin que l’abeille garde son orientation lorsqu’elle est au repos. - Enfin, stocke
transform.positiondanslastPosition.
Appuie sur « Jouer » : l’abeille se tourne vers chaque fleur vers laquelle elle vole. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Oriente-toi dans la direction où l'abeille s'est déplacée depuis la dernière image.
}
}
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 à ramasser3Dé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