This is an old revision of the document!


General

Unity uses 3 rotation systems. Intro to Quaternion Rotations (in Unity)

  1. Euler Angers - rotation about x, y, z axis
  2. Angle Axis - A normalized Vector3 representing the axis about which to rotate by float angle amount
  3. Quaternions - Angle Axis rotation representation that have been scaled to improve performance.

Calculations

This code snippet calculates the rotation required to rotate an object from a given starting direction (in this case the back of the object given Vector3.back) to a final direction (in this case direction to camera) using the Quaternion.FromToRotation() function.

// Get the direction to a camera
Vector3 directionToCamera = Camera.main.transform.position - transform.position;
 
transform.rotation = Quaternion.FromToRotation(Vector3.back, directionToCamera);

Quaternions

They are in the form of x, y, z, w. They are always normalized, so x² + y² + z² + w² = 0

Creating Quaternions

// This has to be normalized. We generally never use this
Quaternion rotation = new Quaternion(0,0,0,1);
 
// You usually create a rotation in euler and then convert to quaternion.
 
==== Convertions ====
<code c#>
// Convert from Quaternion to Euler:
Vector3 inEuler = quaternionRotation.eulerAngles;
 
// Convert Euler to Quaternion
Quaternion inQuaternion = Quaternion.Euler(inEuler);
 
// To Angle-Axis
Quaternion randomQuaternion = Random.rotation;
float angle;
Vector3 axis;
 
randomQuaternion.ToAngleAxis(out angle, out axis);
 
// And back
Quaternion rotation = Quaternion.AngleAxis(angle,axis);
  • general.1586543767.txt.gz
  • Last modified: 2020/04/10 18:36
  • by paul