Zoeken…


Syntaxis

  • Quaternion.LookRotation (Vector3 vooruit [, Vector3 omhoog]);
  • Quaternion.AngleAxis (zwevende hoeken, Vector3 axisOfRotation);
  • float angleBetween = Quaternion.Angle (Quaternion rotatie1, Quaternion rotatie2);

Inleiding tot Quaternion versus Euler

Euler-hoeken zijn "gradenhoeken" zoals 90, 180, 45, 30 graden. Quaternions verschillen van Euler-hoeken in die zin dat ze een punt op een eenheidsbol vertegenwoordigen (de straal is 1 eenheid). Je kunt deze bol beschouwen als een 3D-versie van de eenheidscirkel die je leert in trigonometrie. Quaternions verschillen van Euler-hoeken doordat ze denkbeeldige getallen gebruiken om een 3D-rotatie te definiëren.

Hoewel dit misschien ingewikkeld klinkt (en dat is het ook), heeft Unity geweldige ingebouwde functies waarmee je kunt schakelen tussen Euler-hoeken en quaterions, evenals functies om quaternions te wijzigen, zonder iets te weten over de wiskunde erachter.

Converteren tussen Euler en 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;

Waarom een quaternion gebruiken?

Quaternions lossen een probleem op dat bekend staat als gimbal-vergrendeling. Dit gebeurt wanneer de primaire rotatieas collinear wordt met de tertiaire rotatieas. Hier is een visueel voorbeeld @ 2:09

Quaternion Look Rotation

Quaternion.LookRotation(Vector3 forward [, Vector3 up]) maakt een Quaternion-rotatie die vooruit kijkt naar beneden 'naar beneden' de voorwaartse vector en de Y-as heeft uitgelijnd met de 'omhoog' vector. Als de up-vector niet is opgegeven, wordt Vector3.up gebruikt.

Draai dit spelobject om naar een doelobject te kijken

// 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow