クラスを問わず回転操作に関係する関数

クラスを問わず回転操作に関係する関数


補足


角度の表現には5種類ある
コードを書く際に扱っている角度の種類がどれなのかを常に強く意識しておいた方が考えを形にしやすい
(今、手に持ってる道具がハンマーか、プラスドライバーか等は重要な事)

角度、単一オイラー角 Angle、Degree x 10進数の角度 float
ラジアン Radians、theta x 弧の長さ(0~2*PI) float
オイラー角 EulerAngles (x,y,z) xyzには各軸の角度が入っている Vector3
ベクトル(距離と方向) Direction、Orientations (x,y,z) xyzにはスカラーが入っている Vector2、Vector3
クォータニオン   (x,y,z,w) 3点軸と角度で回転 複素数原理 Quaternion

たとえばQuaternion.DotとVector3.Dotは同じ動作、同じfloatの返値をするが扱える引数の型は違う

オイラー角はunityエディタ上のゲームオブジェクトのインスペクタでRotationとして表示されている

回転や角度に関係しそうな関数


<以下の関数は、オブジェクトの姿勢を変更する>
Transform.rotation ローカル座標での回転値。引数はQuaternionでローカル内の絶対値である点に注意
Transform.Rotate オブジェクトを相対的に回転させます。
「オイラー角を指定して相対回転」、「軸をVector3、角度をfloatで指定して相対回転」の2種類の方法で制御できる
又、ワールド座標、ローカル座標、どちらを基準にするか選べる
Transform.eulerAngles オイラー角としての回転値。個人的な感想ややレガシーな雰囲気を感じる関数
引数で入力する値はオイラー角の絶対値である事に注意。360度を越える値はインクリメントに失敗します

<以下の関数は、ベクトル ⇔ クォータニオン ⇔ オイラー角 の変換用途に適している>
Quaternion.AngleAxis ☆軸の周りを設定した値分回転するrotation を作成する。unityではもっとも使う回転関係の関数です
Quaternion.LookRotation ベクトルの成分から、その方向のクォータニオンを返す
(第一引数をクォータニオンにして返す感じ)
Quaternion.SetLookRotation ベクトルの成分から、その方向のクォータニオンへ変化させる(上記とほぼ同じだが既存の値を上書きする)
Quaternion.eulerAngles 回転のオイラー角を返す。
Quaternion.Euler オイラー角を設定します。オブジェクトを回転させるときに使います。
Quaternion.operator * ☆これも良く使います
lhs および rhs の回転を組合わせます。
クォータニオンにベクトルを掛けることで回転変換後のベクトルが得られる。例えば、
Vector3 vec = Quaternion.LookRotation(new Vector3(1,0,1)) * Vector3.forward;
とすると(0.7071 , 0.0 , 0.7071)のベクトルを得る事が出来る
これは純粋に クォータニオン → ベクトルの変換 としても使えると考えてよい

<以下の関数は、回転を含めた変換行列の作成の用途に適している>
Matrix4x4.SetTRS 行列を移動、回転、大きさの行列にセットする。
Matrix4x4.MultiplyPoint 行列から位置に変換する(変換行列を適用する際に利用すると良い)

<以下の関数は、角度を得る用途に適している>
Mathf.Deg2Rad 度からラジアンに変換する(読み込み専用)
Mathf.Rad2Deg ラジアンから度に変更する(読み込み専用)
Mathf.DeltaAngle 与えられた角度の最短の差を返す。
マイナスの回転角度が欲しい場合に必要な関数
Mathf.DeltaAngle(360,90) -> 90
Mathf.DeltaAngle(470,90) -> -20
Vector3.Angle 2点間の角度を返す。2本のベクトルとの角度差を返す感じ

<以下の関数は、ローカルZ+を基準に意図した方向にオブジェクトを回転させる用途に適している>
Transform.forward ローカル座標のZ軸。公式のリファレンスでは読み出しの利用例のみ記載されているが、
代入するとオブジェクトの姿勢回転が可能。例えば transform.forward = Vector3.right; すれば右を向く
Transform.LookAt 対象のTransformオブジェクトを設定し、その方向を向かせる

<以下の関数は、回転する差分を得る用途に適している>
Quaternion.FromToRotation fromDirection引数からtoDirection引数に回転軸を作成する
(第一引数から第二引数へ回転する差分をクォータニオンにして返す感じ)
Quaternion.SetFromToRotation fromDirection引数からtoDirection引数へ回転させる(上記とほぼ同じだが既存の値を上書きする)

<以下の関数は、時間に従って回転をなめらかに推移させる用途に適している>
Mathf.LerpAngle a 引数からb 引数へ回転します。360 度の回転に対応した関数になります。
t 引数は0 から1 までの値を設定することができます。
Mathf.MoveTowardsAngle MoveTowards関数と機能は同じだが、360 度の折り返しに対応している。
Mathf.SmoothDampAngle 徐々に時間をかけて目標の角度へ向かう。
他の関数と比べて細かい回転の制御が可能。refにより更新されるベロシティをモニタリング出来る
最大回転速度と到達時間が制御できる。オイラー角の単体スカラー(floatで角度、1軸)で扱える点に注意
Vector3.RotateTowards 2点間の特定の位置を円を描くように移動する際の位置を返す
Vector3.Slerp 2点間の特定の位置を円を描くように移動する際の位置を返す
Quaternion.Slerp 2 点間への回転を時間をかけて行う。

<中心となる位置を設定してオブジェクトの位置を回転させる>
Transform.RotateAround 中心となる位置を設定して、オブジェクトを回転させる関数です。
オブジェクトの姿勢を変更する訳でなく、ワールドに対する「位置」を回転させる。
性質的にはpositionに対する操作になる(rotationに対しては全く操作しない)

  • 最終更新:2014-10-03 01:25:35

このWIKIを編集するにはパスワード入力が必要です

認証パスワード