サーチ…


構文

  • Quaternion.LookRotation(Vector3 forward [、Vector3 up]);
  • Quaternion.AngleAxis(float angle、Vector3 axisOfRotation);
  • float angleBetween = Quaternion.Angle(クォータニオン回転1、クォータニオン回転2);

クォータニオンとオイラーの紹介

オイラー角は90度、180度、45度、30度のような「角度」です。クォータニオンはオイラー角と異なり、単位球上の点を表します(半径は1単位です)。この球は、三角法で学ぶ単位円の3Dバージョンと考えることができます。クォータニオンはオイラー角と異なり、3D回転を定義するために虚数を使用します。

これは複雑になるかもしれませんが(おそらくそれは間違いないかもしれませんが)、ユニティは、オイラー角とクォータリオンの間の切り替えを可能にする優れた組み込み関数と、クォータニオンを修正する関数を備えています。

オイラーとクォータニオンの変換

// 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;

クォータニオンを使う理由

クォータニオンは、ジンバルロッキングと呼ばれる問題を解決します。これは、回転の主軸が3次回転軸と同一直線になるときに発生します。 視覚的な例は @ 2:09です

クォータニオンルックローテーション

Quaternion.LookRotation(Vector3 forward [, Vector3 up])は、前方ベクトルを前方に見て、Y軸を 'up'ベクトルに揃えたクォータニオン回転を作成します。アップベクトルが指定されていない場合、Vector3.upが使用されます。

このゲームオブジェクトを回転させて、ターゲットゲームオブジェクトを見る

// 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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow