unity3d
quaternions
Ricerca…
Sintassi
- Quaternion.LookRotation (Vector3 avanti [, Vector3 su]);
- Quaternion.AngleAxis (angoli flottanti, Vector3 axisOfRotation);
- float angleBetween = Quaternion.Angle (Quaternion rotation1, Quaternion rotation2);
Introduzione a Quaternion vs Eulero
Gli angoli di Eulero sono "angoli di grado" come 90, 180, 45, 30 gradi. I quaternioni differiscono dagli angoli di Eulero in quanto rappresentano un punto su una sfera unitaria (il raggio è 1 unità). Puoi pensare a questa sfera come una versione 3D del cerchio dell'Unità che impari in trigonometria. I quaternioni differiscono dagli angoli di Eulero in quanto usano numeri immaginari per definire una rotazione 3D.
Anche se questo può sembrare complicato (e probabilmente lo è), Unity ha grandi funzioni incorporate che ti permettono di cambiare tra gli angoli di Eulero ei quaterioni, oltre alle funzioni per modificare i quaternioni, senza conoscere una sola cosa sulla matematica che sta dietro di loro.
Conversione tra Eulero e Quaternione
// 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;
Perché usare un Quaternion?
I quaternioni risolvono un problema noto come blocco cardanico. Ciò si verifica quando l'asse di rotazione primario diventa collineare con l'asse di rotazione terziario. Ecco un esempio visivo @ 2:09
Quaternion Look Rotation
Quaternion.LookRotation(Vector3 forward [, Vector3 up])
creerà una rotazione Quaternion che guarda avanti 'verso il basso' il vettore in avanti e ha l'asse Y allineato con il vettore 'su'. Se il vettore su non viene specificato, verrà utilizzato Vector3.up.
Ruota questo oggetto di gioco per guardare un oggetto di gioco di destinazione
// 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;