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角を返す可能性があります.ユニバーサルロックの問題を引き起こす.
    //   
    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)をオフにして、実行時にオーラ角を使用して補間できます.