Sök…


Syntax

  • Quaternion.LookRotation (Vector3 framåt [, Vector3 upp]);
  • Quaternion.AngleAxis (floatvinklar, Vector3 AxeFotation);
  • float angleBetween = Quaternion.Angle (Quaternion rotation1, Quaternion rotation2);

Introduktion till Quaternion vs Euler

Euler vinklar är "grad vinklar" som 90, 180, 45, 30 grader. Kvaternioner skiljer sig från Euler-vinklar genom att de representerar en punkt på en enhetsfär (radien är 1 enhet). Du kan tänka på denna sfär som en 3D-version av enhetscirkeln du lär dig i trigonometri. Kvaternioner skiljer sig från Euler-vinklar genom att de använder imaginära siffror för att definiera en 3D-rotation.

Även om detta kan låta komplicerat (och det kan antas vara), har Unity fantastiska inbyggda funktioner som gör att du kan växla mellan Euler-vinklar och kvaterioner, såväl som funktioner för att ändra kvartärer, utan att veta en sak om matematiken bakom dem.

Konvertering mellan Euler och 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;

Varför använda en kvartär?

Kvaternioner löser ett problem som kallas gimbal-låsning. Detta inträffar när den primära rotationsaxeln blir kollinär med den tertiära rotationsaxeln. Här är ett visuellt exempel @ 2:09

Quaternion Look Rotation

Quaternion.LookRotation(Vector3 forward [, Vector3 up]) kommer att skapa en Quaternion-rotation som ser framåt 'ner' framåtvektorn och har Y-axeln i linje med 'upp' -vektorn. Om uppvektorn inte specificeras kommer Vector3.up att användas.

Rotera detta spelobjekt för att titta på ett målspelobjekt

// 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow