ファイボックスUntiy一分講座のアイキャッチ画像
ファイボックスUntiy一分講座のアイキャッチ画像

1分間 Unity講座 オブジェクトの回転方法 - ファイブボックス

Unityでオブジェクトの向きを変えるには transform.rotation プロパティを直接指定、正しrotationプロパティはQuatanionで管理されます

1分間 Unity講座 オブジェクトの回転方法

ファイブボックス一分間Unity講座、主にUnityに初めて触れる方や、初めて間もない方向けのステップアップ講座です。

ファイブボックス公式Youtube「Unityマニア」の「1分間Unity講座」の記事の詳細説明になります。

オブジェクトの回転は、transformコンポーネント の Rotationプロパティが管理しています。内部ではQuaternion という4軸で構成されていますが、Inspectorではx軸、y軸、z軸の3軸からなるEuler角で表示されています。

オイラー角 (Euler Angles)

オイラー角は、三次元空間における物体の回転を3つの角度で表します。たとえば、飛行機がどのように動くかを考えてみましょう。飛行機の動きは次の3つの角度で表現できます。

  1. ロール (Roll): 機体を進行方向を軸に回転させる動き。例えば、左の翼を下げて右の翼を上げる動き。
  2. ピッチ (Pitch): 機体を上下に回転させる動き。例えば、機首を上げて機尾を下げる動き。
  3. ヨー (Yaw): 機体を左右に回転させる動き。例えば、機首を左に向ける動き。

これらの3つの角度を順番に適用することで、物体の最終的な向きを決定できます。

クォータニオン (Quaternion)

クォータニオンは、四つの要素(スカラー=大きさ部分 w とベクトル部分 (x,y,z))を持つ四元数を使用して、回転を表現します。クォータニオン q は次のように表されます:

q = w + xi + yj + zk

ここで、w はスカラー部分と呼ばれ、x,y,z はベクトル部分と呼ばれます。つまり、x,y,z のベクトルで回転方向を決定し、wのスカラー部分でその回転方向に対する回転の大きさを決定し、オブジェクトの向きを決定します。

クォータニオンを使用すると、回転は一つの連続的な操作で表現され、計算の際に特異点(ジンバルロック)を避けることができます。

オイラー角からクォータニオンへの変換

オイラー角(ロール、ピッチ、ヨー)をクォータニオンに変換するには、以下のように計算します:

  1. ロール α
  2. ピッチ β
  3. ヨー γ
UnityのEuler角からクウォータニオンに変換する数式

こんな計算、毎回やっていられないですよね。Unityにはこの計算をやってくれる関数があります。

それが Quaternion.Euler(α,β,γ) になります。

Transform.rotation プロパティを更新する回転

x軸を中心に回転させる方法

void Update()
 {    
     if (Input.GetKey(KeyCode.UpArrow))	//上矢印キーが押されたら
     {
         //X軸を中心に 1 の速さで回転
         transform.rotation *= Quaternion.Euler(1, 0, 0);
     }     
     if (Input.GetKey(KeyCode.DownArrow))  //下矢印キーが押されたら
     {
         //X軸を中心に -1 の速さで回転
         transform.rotation *= Quaternion.Euler(-1, 0, 0);
     }
}

y軸を中心に回転させる方法

void Update()
 {    
     if (Input.GetKey(KeyCode.D))	//Dキーが押されたら
     {
         //y軸を中心に 1 の速さで回転
         transform.rotation *= Quaternion.Euler(0, 1, 0);
     }     
     if (Input.GetKey(KeyCode.A))  //Aキーが押されたら
     {
         //y軸を中心に -1 の速さで回転
         transform.rotation *= Quaternion.Euler(0, -1, 0);
     }
}

z軸を中心に回転させる方法

void Update()
 {    
     if (Input.GetKey(KeyCode.W))	//Wキーが押されたら
     {
         //z軸を中心に 1 の速さで回転
         transform.rotation *= Quaternion.Euler(0, 0, 1);
     }     
     if (Input.GetKey(KeyCode.S))  //Sキーが押されたら
     {
         //z軸を中心に -1 の速さで回転
         transform.rotation *= Quaternion.Euler(0, 0, -1);
     }
}

これで指定した軸を中心に回転させることができるようになりました。

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP