Suche…


Syntax

  • Quaternion.LookRotation (Vector3 weiterleiten [, Vector3 aufwärts]);
  • Quaternion.AngleAxis (Float-Winkel, Vector3-AchseOfRotation);
  • float angleBetween = Quaternion.Angle (Quaternion-Drehung1, Quaternion-Drehung2);

Einführung zu Quaternion vs Euler

Eulerwinkel sind "Gradwinkel" wie 90, 180, 45, 30 Grad. Quaternionen unterscheiden sich von Eulerwinkeln dadurch, dass sie einen Punkt auf einer Einheitskugel darstellen (der Radius beträgt 1 Einheit). Sie können sich diese Kugel als eine 3D-Version des Einheitskreises vorstellen, den Sie in der Trigonometrie lernen. Quaternionen unterscheiden sich von Eulerwinkeln dadurch, dass sie imaginäre Zahlen verwenden, um eine 3D-Drehung zu definieren.

Auch wenn dies kompliziert klingt (und ist es zweifellos auch), verfügt Unity über hervorragende integrierte Funktionen, mit denen Sie zwischen Eulerwinkeln und Viertelbereichen wechseln können, sowie Funktionen zum Ändern von Quaternionen, ohne dass Sie etwas über die dahinterstehende Mathematik wissen.

Konvertierung zwischen Euler und 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;

Warum eine Quaternion verwenden?

Quaternionen lösen ein Problem, das als Kardanverriegelung bekannt ist. Dies geschieht, wenn die primäre Rotationsachse mit der Tertiärachse kollinear wird. Hier ist ein visuelles Beispiel @ 2:09

Quaternion Look Rotation

Quaternion.LookRotation(Vector3 forward [, Vector3 up]) erstellt eine Quaternion-Rotation, die den Vorwärtsvektor nach unten zeigt und die Y-Achse mit dem Up-Vektor ausgerichtet ist. Wenn der Aufwärtsvektor nicht angegeben ist, wird Vector3.up verwendet.

Drehen Sie dieses Spielobjekt, um ein Zielobjekt anzusehen

// 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow