up:: Unity

クォータニオン

基本

VectorにQuaternionを掛けると回転する
その例として、transform.upというローカル座標の上は、transform.rotation * Vector3.upで表せる。transform.rotationというクォータニオンワールド座標unの上であるVector3.upを掛けると回転し、ローカル座標の上になる。

クォータニオン同士を掛けると、それぞれの角度の合計値になる。

ちなみに、Unityの座標系は一般の右手系(x,y,zが右,上,手前)ではなく、左手系(右上)なので、時計回りが正の向きになる。

なおUnityでは大体回転を表す値であるtransform.rotationに直接代入して回転してる。

作成

Quaternion.AngleAxis (float angle, Vector3 axis)

クォータニオンを作るメソッド。
axisで指定した軸をもとに、angle分だけ回転したクォータニオンを作ることが出来る。
よく使うaxisはこれら。

  • Vector3.right(x軸を指定したい場合)
  • Vector3.up(y軸を指定したい場合)
  • Vector3.forward(z軸を指定したい場合)

Quaternion-AngleAxis - Unity スクリプトリファレンス

transform.rotation

オブジェクトの姿勢がQuaternionで入っている変数。
上記のQuaternion.AngleAxisと合わせ、回したい角度分のクォータニオン x transform.rotationをもう一度transform.rotationに代入すれば回る。

Transform-rotation - Unity スクリプトリファレンス

Quaternion.Euler (float x, float y, float z)

クォータニオンをオイラー角から作るメソッド。
z軸、x軸、y軸の順で回転する。

Quaternion-Euler - Unity スクリプトリファレンス

Quaternion FromToRotation (Vector3 fromDirection, Vector3 toDirection)

fromからtoへの回転クォータニオンを作るメソッド。
思った回転になるかどうかは別。

Unity - Scripting API: Quaternion.FromToRotation

Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up)

forward方向を正面とするクォータニオンを作るメソッド。
回転を作るというより、Vector3を姿勢クォータニオンに変換するメソッド。

Unity - Scripting API: Quaternion.LookRotation

変換

合成

*演算子を使用することで、クォータニオンを合成できる。
後に回転させる方を先に書く。

transform.eularAngle

オブジェクトの姿勢がVector3で入っている変数。
.x,y,zでそれぞれ取り出せる。
ローカル座標で取り出したいなら.localEularAngle。
どちらにせよ、Vector3を代入すると回転する。

transform.Rotate(float,float,float,Space)

transform.eularAngleに対して数値を加算できるメソッド。デフォルトでローカル座標回転。
第4引数にSpace.Worldを指定するとワールド座標で回転する。

【Unity】回転の方法が一目でわかる !transform.Rotateを極めよう! | 侍エンジニアブログ

transform.LookAt(Transform target, Vector3 worldUp = Vector3.up)

指定したtransformの方向に向くメソッド。
簡単な回転ならこれで問題ない。
第二引数は上向きがどちらなのか指定する引数。

Unity - Scripting API: Transform.LookAt

【Unity】 Quaternionの使い方 - エフアンダーバー
【Unity】Quaternionでオブジェクトを回転させる方法 – XR-Hub
UnityのベクトルとQuaternionによる回転について - テラシュールブログ
Unityでオブジェクトを指定の方向に向ける - Qiita
【Unity】オブジェクトをターゲットの方向に回転させる | ねこじゃらシティ
Unityでオブジェクトを回転させる方法まとめ | tama-lab