top of page

1分間 Unity講座 オブジェクトの回転方法 メソッド編

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



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


前回のブログでご説明した通り、オブジェクトの回転はtransformコンポーネント の Rotationプロパティが管理しています。前回は Rotation プロパティを直接更新してオブジェクトを回転させましたが、今回はTransformコンポーネントがもつ、 Rotate() メソッドを使ってオブジェクトを回転させてみます。


ローカル座標に対する回転


void Update()
{
    if (Input.GetKey(KeyCode.UpArrow))    //上矢印キーが押されたら
    {
        //X軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.right);
    }
    if (Input.GetKey(KeyCode.DownArrow))   //下矢印キーが押されたら
    {
        //X軸を中心に -1 の速さで回転
        transform.Rotate(-Vector3.right);
    }
    if (Input.GetKey(KeyCode.D))    	//Dキーが押されたら
    {
        //Y軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.up);
    }
    if (Input.GetKey(KeyCode.A))    	//Aキーが押されたら
    {
        //Y軸を中心に -1 の速さで回転
        transform.Rotate(-Vector3.up);
    }
    if (Input.GetKey(KeyCode.W))	    //Wキーが押されたら
    {
        //Z軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.forward);
    }
    if (Input.GetKey(KeyCode.S))  	  //Sキーが押されたら
    {
        //Z軸を中心に 1 の速さで回転
        transform.Rotate(-Vector3.forward);
    }
}

なお Rotate()メソッドのカッコ内の値は、それぞれ以下の様に置き換えることができます。

Vector3.right		⇒	new Vector3(1, 0, 0)
Vector3.up		⇒	new Vector3(0, 1, 0)
Vector3.forword	⇒	new Vector3(0, 0, 1)

Rotate()メソッドは、引数に回転方向だけを指定した場合、ローカル座標に対し回転するという特性を持っています。

例えば下の図のようにオブジェクトを傾けた状態で以下のコードで回転させたとき、オブジェクトはローカル座標のY軸を中心に回転します。

transform.Rotate(Vector3.up);
UnityTransformコンポーネントのRotateメソッドの特性

これは、Rotate()メソッドの第二引数に Space.Self という言葉が隠れているためです。

transform.Rotate(Vector3.right, Space.Self);
transform.Rotate(Vector3.up, Space.Self);
transform.Rotate(Vector3.forword, Space.Self);

Space.Self は、ローカル座標に対する指示を表しており、Rotate()メソッドはデフォルトでローカル座標に対する動きを表しています。


ワールド座標に対する回転

ワールド座標に対する指定する際は、第二引数に Space.World と指定します。


void Update()
{
    if (Input.GetKey(KeyCode.UpArrow))    //上矢印キーが押されたら
    {
        //X軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.right, Space.World);
    }
    if (Input.GetKey(KeyCode.DownArrow))   //下矢印キーが押されたら
    {
        //X軸を中心に -1 の速さで回転
        transform.Rotate(-Vector3.right, Space.World);
    }
    if (Input.GetKey(KeyCode.D))    	//Dキーが押されたら
    {
        //Y軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.up, Space.World);
    }
    if (Input.GetKey(KeyCode.A))    	//Aキーが押されたら
    {
        //Y軸を中心に -1 の速さで回転
        transform.Rotate(-Vector3.up, Space.World);
    }
    if (Input.GetKey(KeyCode.W))	    //Wキーが押されたら
    {
        //Z軸を中心に 1 の速さで回転
        transform.Rotate(Vector3.forward, Space.World);
    }
    if (Input.GetKey(KeyCode.S))  	  //Sキーが押されたら
    {
        //Z軸を中心に 1 の速さで回転
        transform.Rotate(-Vector3.forward, Space.World);
    }
}

回転させたい対象と回転軸を明確にして、命令してみてください。


 

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

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

最新記事

すべて表示

Comments


bottom of page