クォータニオン(Quaternion)
クォータニオン とは 四元数(wiki)のことです.
3Dプログラミングでは,クォータニオンを用いて回転を処理することが多いです.
回転と聞くとX軸回転,Y軸回転,Z軸回転のようなものを思い浮かべますが,これはオイラー角と呼ばれるものを利用した回転になります.
オイラー角を用いた回転は非常にシンプルで,どの軸基準で何度回転させるかというだけです.
しかしオイラー角では回転する軸の順番で,向きが変わってしまいます.
Blenderでは「回転」の下に「XYZオイラー角」とあると思います.これはXYZの順番で上の角度ど回転した結果を意味します.
なので,以下のように「ZYXオイラー角」を用いると最終的な向きは変わってしまいます.
https://gyazo.com/95d1425383b30dc50a17981c18060c65
一方クォータニオンを使った回転は一発で決まります.
Quaternion自体の理論は数学的な話になり難しいものですが、Unityでさくっと使用する分には特徴を掴むだけで十分です。
単純に回転の向きと回転の大きさを表現する数だと捉えてもらうと良いかもしれません。
少し気を付けてほしい部分は、UnityのInspectorビューでRotation(物体の回転状態)を指定できるのですが、ここではオイラー角(度数法、1周を360度とした馴染み深い数)を使っています。
https://gyazo.com/47c0b042a1851b177ee6517ab5e4a826
このように一見Unityでは回転をオイラー角で指定しているように思えますが、実は入力したオイラー角を内部で勝手にQuaternionとして計算し保持しているのです。
Quaternionは数の名称であり、様々な3DCGエディタでも使われますが、UnityのQuaternionは少し変わった特徴があります。
それは一般的な右手系の座標系ではなく、左手系の座標系を使用しているということです。
具体的には
x 軸方向: 右
y 軸方向: 上
z 軸方向: 前
となっています。(下図が右手系と左手系の違いです。)
https://gyazo.com/76b159181cc0435c8ee521799e8688ae
この違いによって何が起きるかと言うと
Quaternionの正の向きが反対になってしまいます。詳細は下記です。
右手系では回転方向は反時計回りを正の向きとして測る
左手系では回転方向は時計回りを正の向きとして測る
ただ、ややこしく考える必要はなく、シンプルに「Unity では角度(Quaternion)を時計回りで考える」と認識すれば問題ありません。