Version: Unity 6.0 (6000.0)
言語 : 日本語
Rotation and orientation
クォータニオンによる回転と向き

Unity の回転と向き

Unity では左手座標系を使用します。回転と向きを表現するために、オイラー角とクォータニオンの両方を使用することができます。これらは同等の表現が可能ですが、用途と制限は異なります。

通常、シーン内のオブジェクトは、向きをオイラー角度で表示する Transform コンポーネントを使って回転させます。ただし、Unity では回転と向きをクォータニオンとして内部に保存します。これは、ジンバルロックにつながる可能性がある、より複雑なモーションに役立ちます。

左手座標系

Unity の左手座標系の軸は、正の X 軸から正の Y 軸への回転の向きが、正の Z 軸に沿って見ると反時計回りであることを示しています。
Unity の左手座標系の軸は、正の X 軸から正の Y 軸への回転の向きが、正の Z 軸に沿って見ると反時計回りであることを示しています。

座標系は、3 次元スペースでのオブジェクトの位置を表すものです。Unity では左手座標系を使用するため、正の X 軸は右、正の Y 軸は上、正の Z 軸は前方を指します。Unity の左手座標系では、正の X 軸から正の Y 軸への回転の向きは、正の Z 軸沿いに見た場合に反時計回りになります。

オイラー角

Transform 座標では、回転はベクトル プロパティ Transform.eulerAngles X、Y、Z で表示されます。法線ベクトルとは異なり、これらの値は実際には X、Y、Z 軸の回転角度 (度単位) を表します。

オイラー角の回転は、3 つの軸で別々に 3 つの回転を実行します。Unity では、Z 軸、X 軸、Y 軸の順にオイラー角回転を行います。この回転方法は外的 (extrinsic) 回転で、回転が行われても元の座標系は変化しません。

ゲームオブジェクトを回転させるには、Transform コンポーネントに、各軸を回転させる角度の値を入力します。スクリプトでゲームオブジェクトを回転するには、Transform.eulerAngles を使用します。オイラー角に変換して計算や回転を行うと、ジンバルロックの問題が発生するリスクがあります。

ジンバルロック

3D 空間にあるオブジェクトが自由度を失い、2 次元内でしか回転できなくなることをジンバルロックといいます。ジンバルロックは、オイラー角で 2 つの軸が平行になった場合に、発生することがあります。スクリプトで回転値をオイラー角に変換しない場合は、クォータニオンを使ってジンバルロックを防ぐことができます。

ジンバルロックの問題がある場合、回転に Transform.RotateAround を使用すれば、オイラー角を使用せずにすみます。また、各軸に Quaternion.AngleAxis を使用し、それらを掛け合わせることもできます (クォータニオンの乗算は、各回転を順番に適用します)。

クォータ二オン

クォータニオンは、3D 空間における空間の向きや回転を一意に表すための数学的表記法です。クォータニオンでは、4 つの数値を使用して 3D の単位軸の周りの回転方向と角度をエンコードします。これらの 4 つの値は、方向や度数ではなく複素数です。詳細については、クォータニオンの数学的な処理について確認してください。

クォータニオンの回転は計算が効率的で安定しているため、Unity では回転値をクォータニオンに変換して保存します。Unity エディターでは、回転をクォータニオンとして表示しません。これは、1 つのクォータニオンでは、どの軸についても、360 度を超える回転を表現できないからです。

Quaternion クラスを使用すると、クォータニオンを直接使用することができます。回転にスクリプトを使用する場合は、Quaternion クラスと関数による回転値の計算と変更が可能です。オイラー角として値を回転に適用することもできますが、問題を避けるためにクォータニオンとして保存する必要があります。

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

回転を好みの方法で表示編集するために、クォータニオンとオイラー角の間で変換するには、スクリプトを使用します。

  • オイラー角をクォータニオンに変換するには、Quaternion.Euler 関数を使用します。
  • クォータニオンをオイラー角に変換するには、Quaternion.eulerAngles 関数を使用します。

追加リソース

Rotation and orientation
クォータニオンによる回転と向き