hildsoftのコード置き場

プログラム関連で調べたことやコードの保管場所です

Unityで使うQuaternionのサンプルコード(事前準備)

スポンサーリンク

f:id:hildsoft:20170706031459p:plain

Unityで使うQuaternion

クォータニオン(Quaternion)の理解はそこそこでも良いからとりあえずサンプルコードが欲しい、 サンプルコードを動かしながら理解したい人向けの準備記事です。

もう少し詳しく知りたい方はこちら。

www.hildsoft.com

www.hildsoft.com

根本的な数学のレベルから理解したい方はこちら。

qiita.com

最低限押さえてほしいこと

流石に全く知らないと説明も難しいので、最低限この3つだけは押さえてください。

1.クォータニオンの持つ意味

クォータニオンは、ある状態から別の状態へ回転させる操作、または回転後の状態です。

f:id:hildsoft:20170706013913p:plain

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の違い

f:id:hildsoft:20170706021933p:plain

ヒエラルキー上で親子関係があるオブジェクトです。

分かりやすいように、キューブにx,y,z軸を表す棒を付けています。

ここで子オブジェクトを基本状態に回転させます。


f:id:hildsoft:20170706022046p:plain

this.transform.rotation = Quaternion.identity; // グローバル座標系

transform.rotationはグローバル座標系が基準です。


f:id:hildsoft:20170706022054p:plain

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(回転操作)

では意図しない結果になる場合があります。

サンプルコード

記事を書き次第追加していきます。

code.hildsoft.com