Recherche…


Syntaxe

  • Quaternion.LookRotation (Vector3 forward [, Vector3 up]);
  • Quaternion.AngleAxis (angles flottants, Vector3 axisOfRotation);
  • angle flottantEntre = Quaternion.Angle (Quaternion rotation1, Quaternion rotation2);

Introduction à Quaternion vs Euler

Les angles d'Euler sont des "angles de degré" comme 90, 180, 45, 30 degrés. Les quaternions diffèrent des angles d'Euler en ce sens qu'ils représentent un point sur une sphère d'unité (le rayon est de 1 unité). Vous pouvez voir cette sphère comme une version 3D du cercle Unit que vous apprenez en trigonométrie. Les quaternions diffèrent des angles d'Euler en ce sens qu'ils utilisent des nombres imaginaires pour définir une rotation 3D.

Bien que cela puisse paraître compliqué (et c'est sans doute le cas), Unity possède d'excellentes fonctions intégrées qui vous permettent de basculer entre les angles et les quaterions d'Euler, ainsi que des fonctions permettant de modifier les quaternions, sans connaître les mathématiques.

Conversion entre Euler et Quaternion

// Create a quaternion that represents 30 degrees about X, 10 degrees about Y
Quaternion rotation = Quaternion.Euler(30, 10, 0);

// Using a Vector
Vector3 EulerRotation = new Vector3(30, 10, 0);
Quaternion rotation = Quaternion.Euler(EulerRotation);

// Convert a transfroms Quaternion angles to Euler angles
Quaternion quaternionAngles = transform.rotation;
Vector3 eulerAngles = quaternionAngles.eulerAngles;

Pourquoi utiliser un quaternion?

Les quaternions résolvent un problème connu sous le nom de blocage du cardan. Cela se produit lorsque l'axe principal de rotation devient colinéaire avec l'axe de rotation tertiaire. Voici un exemple visuel @ 2:09

Quaternion Look Rotation

Quaternion.LookRotation(Vector3 forward [, Vector3 up]) créera une rotation de Quaternion qui «avance» le vecteur avant et dont l'axe Y est aligné avec le vecteur «up». Si le vecteur ascendant n'est pas spécifié, Vector3.up sera utilisé.

Faites pivoter cet objet de jeu pour regarder un objet de jeu cible

// Find a game object in the scene named Target
public Transform target = GameObject.Find("Target").GetComponent<Transform>();

// We subtract our position from the target position to create a
// Vector that points from our position to the target position
// If we reverse the order, our rotation would be 180 degrees off.
Vector3 lookVector = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(lookVector);
transform.rotation = rotation;


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow