unity3d
クォータニオン
サーチ…
構文
- 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