Unityでの回転と向き
5497 ワード
文書ディレクトリ Rotation and Orientation in Unity オーラ角と四元数 オーラ角 四元数 プログラミング中 直接作成と操作四元数 作成 操作 オーラ角使用注意 アニメーションの UnityのAnimation Window が読み込む動画データ Rotation and Orientation in Unity
公式文書アドレス:Rotation and Orientation in Unity
Unityでの回転は、通常四元数とオーラ角で表されます.メリットとデメリットがありますUnityの内部には、メソッドが理解され編集されているため、Inspectorにオラ角形式が表示されます.
オーラ角と四元数
オーラかく
オーラ角はx,y,z軸の順に行われる回転で表され,GameObjectに1つのオーラ角を適用すると各軸の回転がそれぞれ適用される.の利点:オラ角は人にとって読むことができ、オラ角を読んで頭の中で回転概念を確立することができます. の利点:オーラ角は180度を超える回転を表現することができ、対応して、四元数は回転の最短経路を「探す」ことができるが、論理的に正しくない場合がある.例えば、360度で回転できない砲塔に対して、最も左から最も回転し、対端路径は回転制限を破る. 制限:オーラ角はユニバーサルロックGimbal Lockに制限されており、3つの軸を回転すると、1回目または2回目の回転で3回目の回転軸が前の回転軸と同じ方向を指す可能性があり、「degree of freedom」(回転自由度)が失われる.3回目の回転値が対応する軸に適用されないため、1つの回転軸が失われたと理解できる.
しげんすう
四元数は、回転またはオブジェクトの向きを表すために使用できます.この数学モデルは、4つの数で表される(x,y,z,w)が、これらの数字は回転軸も回転角度も表さず理解できないため、xyz成分の値(wは角度を表し、エラーが発生する可能性がある.この背後にある数学原理をよく知らない限り.
小さな秘密:軸と角度は四元数に隠されています.軸(nx,ny,nz)に沿って回転し、角度がA度であると仮定すると、四元数は:
[w, x, y, z] = [cos(A/2), sin(A/2)nx, sin(A/2)ny, sin(A/2)nz]
Vector 3は位置と方向(方向を表す場合、原点は000点)を表すことができ、1つの四元数は向きと回転を表すことができ、回転を表す場合、identityからの回転である.四元数は180度を超える回転を表すことができない.メリット:ユニバーサルロックの問題がない 制限:180度を超える回転は表現できません.四元数は-180から180で360度の回転を表します. 制限:読み取り不能で、値の意味を直接理解できません. Unityは4元数でGameObjectの回転を格納します.4元数がより丈夫だからです.
ただしInspectorパネルでは、表示される回転はオーラ角で表されます.オーラ角は編集可能であるためです.
[外部チェーン画像の転送に失敗し、ソース局に盗難防止チェーン機構がある可能性があり、画像を保存して直接アップロードすることを提案する(img-1 KdbpY 1 X-1580048145871)(https://docs.unity3d.com/uploads/Main/InspectorRotationEulerAngles.png)]
したがって、Inspectorでx:0,Y:365,Z:0を設定してオブジェクトの回転を設定できると、四元数ではその回転を表現できないため、ゲームを開始するとX:0,Y:5,Z:0になります.効果は同じです.
プログラミング中
スクリプトで回転を処理する場合は、四元数を使用して回転値を作成または変更する必要があります.もちろん、オーラ角を使用するのも有効ですが、オーラ角を処理するには四元数インタフェースを使用し、四元数から取得、変更、オーラ角を四元数に再適用すると、誤った結果が発生する可能性があります.
直接作成と操作の四元数
Unityは、4元数を作成および操作するためのインタフェースを提供し、オーラ角の参加は必要ありません.たとえば、
作成 Quaternion.LookRotation Quaternion.AngleAxis Quaternion.FromToRotation
操作 Quaternion.Slerp Quaternion.Inverse Quaternion.RotateTowards Transform.Rotate & Transform.RotateAround
オラ角使用注意
ただし、コードでEuler角を使用したい場合があります.この場合、角度を自分で定義した変数に格納し、これらの変数で回転を更新します.取得→修正→Euler角を適用するフローでコードを書くと、取得するたびにEuler角が一時的に四元数から計算されるため、計算ごとに異なるEuler角を返す可能性があります.ユニバーサルロックの問題を引き起こす.
アニメーション
多くの3 DクリエイティブプラグインやUnity内部には、独自のアニメーションウィンドウがあり、オラ角でアニメーションの回転を編集しています.
これらの回転は、720度の回転など、四元数の表現の範囲を超えることが多いが、オーラ角は問題ないが、四元数にとっては回転がないに等しい.
UnityのAnimation Window
Unity内部のアニメーション編集ウィンドウでは、補間方法を決定するためのオプションが設定されています.クォータニオイまたはオーラニオイを使用します.オーラニオイの使用を指定することで、完全なモーションレンジで補間したいことをUnityに伝えます.クォータニオイを使用すると、限定された範囲内に制限されます(-18080)、クォータニオイを使用して補間されます.
読み込まれたアニメーションデータ
インポートされた外部アニメーションリソース.通常、ファイルはオーラ角を使用して回転を記録します.既定のUnityでは、サンプリングアニメーションを再実行して新しいクォータニオイアニメーションフレームを生成し、回転がクォータニオイ有効範囲を超えないようにします.
たとえば、6フレーム間隔で2フレームのアニメーションが想定されます.1フレーム目はx=0、2フレーム目(6フレーム後)は270回転です.この2フレーム間を直接クォータニオイ数で補間すると、アニメーションは最短パスで90度回転します.ただし、再サンプリングにより、回転は6フレームと定義され、フレームが45度ではありません.これにより、クォータニオイ補間を行う場合、正しくなります.
再サンプリングで元のアニメーションと完全に一致しない場合があります.この場合、アニメーションインポート設定で再サンプリングオプション(Resample Curves)をオフにして、実行時にオーラ角を使用して補間できます.
公式文書アドレス:Rotation and Orientation in Unity
Unityでの回転は、通常四元数とオーラ角で表されます.メリットとデメリットがありますUnityの内部には、メソッドが理解され編集されているため、Inspectorにオラ角形式が表示されます.
オーラ角と四元数
オーラかく
オーラ角はx,y,z軸の順に行われる回転で表され,GameObjectに1つのオーラ角を適用すると各軸の回転がそれぞれ適用される.
しげんすう
四元数は、回転またはオブジェクトの向きを表すために使用できます.この数学モデルは、4つの数で表される(x,y,z,w)が、これらの数字は回転軸も回転角度も表さず理解できないため、xyz成分の値(wは角度を表し、エラーが発生する可能性がある.この背後にある数学原理をよく知らない限り.
小さな秘密:軸と角度は四元数に隠されています.軸(nx,ny,nz)に沿って回転し、角度がA度であると仮定すると、四元数は:
[w, x, y, z] = [cos(A/2), sin(A/2)nx, sin(A/2)ny, sin(A/2)nz]
Vector 3は位置と方向(方向を表す場合、原点は000点)を表すことができ、1つの四元数は向きと回転を表すことができ、回転を表す場合、identityからの回転である.四元数は180度を超える回転を表すことができない.
ただしInspectorパネルでは、表示される回転はオーラ角で表されます.オーラ角は編集可能であるためです.
[外部チェーン画像の転送に失敗し、ソース局に盗難防止チェーン機構がある可能性があり、画像を保存して直接アップロードすることを提案する(img-1 KdbpY 1 X-1580048145871)(https://docs.unity3d.com/uploads/Main/InspectorRotationEulerAngles.png)]
したがって、Inspectorでx:0,Y:365,Z:0を設定してオブジェクトの回転を設定できると、四元数ではその回転を表現できないため、ゲームを開始するとX:0,Y:5,Z:0になります.効果は同じです.
プログラミング中
スクリプトで回転を処理する場合は、四元数を使用して回転値を作成または変更する必要があります.もちろん、オーラ角を使用するのも有効ですが、オーラ角を処理するには四元数インタフェースを使用し、四元数から取得、変更、オーラ角を四元数に再適用すると、誤った結果が発生する可能性があります.
直接作成と操作の四元数
Unityは、4元数を作成および操作するためのインタフェースを提供し、オーラ角の参加は必要ありません.たとえば、
作成
操作
オラ角使用注意
ただし、コードでEuler角を使用したい場合があります.この場合、角度を自分で定義した変数に格納し、これらの変数で回転を更新します.取得→修正→Euler角を適用するフローでコードを書くと、取得するたびにEuler角が一時的に四元数から計算されるため、計算ごとに異なるEuler角を返す可能性があります.ユニバーサルロックの問題を引き起こす.
//
float x;
void Update ()
{
x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x,0,0);
}
//
void Update ()
{
var angles = transform.rotation.eulerAngles;
angles.x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(angles);
}
アニメーション
多くの3 DクリエイティブプラグインやUnity内部には、独自のアニメーションウィンドウがあり、オラ角でアニメーションの回転を編集しています.
これらの回転は、720度の回転など、四元数の表現の範囲を超えることが多いが、オーラ角は問題ないが、四元数にとっては回転がないに等しい.
UnityのAnimation Window
Unity内部のアニメーション編集ウィンドウでは、補間方法を決定するためのオプションが設定されています.クォータニオイまたはオーラニオイを使用します.オーラニオイの使用を指定することで、完全なモーションレンジで補間したいことをUnityに伝えます.クォータニオイを使用すると、限定された範囲内に制限されます(-18080)、クォータニオイを使用して補間されます.
読み込まれたアニメーションデータ
インポートされた外部アニメーションリソース.通常、ファイルはオーラ角を使用して回転を記録します.既定のUnityでは、サンプリングアニメーションを再実行して新しいクォータニオイアニメーションフレームを生成し、回転がクォータニオイ有効範囲を超えないようにします.
たとえば、6フレーム間隔で2フレームのアニメーションが想定されます.1フレーム目はx=0、2フレーム目(6フレーム後)は270回転です.この2フレーム間を直接クォータニオイ数で補間すると、アニメーションは最短パスで90度回転します.ただし、再サンプリングにより、回転は6フレームと定義され、フレームが45度ではありません.これにより、クォータニオイ補間を行う場合、正しくなります.
再サンプリングで元のアニメーションと完全に一致しない場合があります.この場合、アニメーションインポート設定で再サンプリングオプション(Resample Curves)をオフにして、実行時にオーラ角を使用して補間できます.