Unityで使うQuaternion
クォータニオン(Quaternion)の理解はそこそこでも良いからとりあえずサンプルコードが欲しい、 サンプルコードを動かしながら理解したい人向けの準備記事です。
もう少し詳しく知りたい方はこちら。
根本的な数学のレベルから理解したい方はこちら。
最低限押さえてほしいこと
流石に全く知らないと説明も難しいので、最低限この3つだけは押さえてください。
1.クォータニオンの持つ意味
クォータニオンは、ある状態から別の状態へ回転させる操作、または回転後の状態です。
Unityでは基本状態では、Rotationの値が、X:0,Y:0,Z:0で作成されます。
これを基本状態(無回転状態)と考えてください。
この状態をクォータニオンではQuaternion.identityとしています。
Quaternion.identityの状態にするには、下記のコードで可能です。
this.transform.localRotation = Quaternion.identity; // 親の座標系 //this.transform.rotation = Quaternion.identity; // グローバル座標系
2.transform.rotationとtransform.localRotationの違い
ヒエラルキー上で親子関係があるオブジェクトです。
分かりやすいように、キューブにx,y,z軸を表す棒を付けています。
ここで子オブジェクトを基本状態に回転させます。
this.transform.rotation = Quaternion.identity; // グローバル座標系
transform.rotationはグローバル座標系が基準です。
this.transform.localRotation = Quaternion.identity; // 親の座標系
transform.localRotationは親の座標系が基準です。
オブジェクトがルートの直下にあるときは、親がグローバルになるため、
transform.localRotationもtransform.rotationも同じ結果になります。
3.クォータニオンの計算
クォータニオンは回転操作なので、計算によりオブジェクトを回転させることができます。
その計算方法ですが、回転させたいものに対して、左側からかけることで可能です。
通常の実数での掛け算は積の交換法則が成り立つので、実数a,bに対してa * b = b * aが成り立ちます。
しかし、クォータニオンの計算では行列の計算と同じく、一般的に積の交換法則は成り立ちません。
X=(今の状態)
A=(回転操作)
B=(結果の状態)
とすると、
B(結果の状態) = A(回転操作) * X(今の状態)
で計算することができますが、
B(結果の状態) = X(今の状態) * A(回転操作)
では意図しない結果になる場合があります。
サンプルコード
記事を書き次第追加していきます。