Unityでオブジェクトを回転させる方法をわかりやすくまとめました

19/02/03 14:42:21     19/02/11 15:31:36

Unityの回転

Unityでのゲーム開発のなかでも難易度が高いのがオブジェクトの回転です。

アセットでいろいろできるのだから回転も簡単だろうと思われがちですが、実はそうではありません。このページでは、Unityでオブジェクトを回転させる方法について解説していきます。

transform.rotationを使用して回転させる

Unityでオブジェクトを回転させるには、transformを使用するのがもっとも一般的です。transformとはオブジェクトの位置、回転、サイズを保持しているクラスで、これを使用することでオブジェクトの回転を複雑なコーディングなしに実現することができます。

そして、今回使用するのはこのなかでも回転なので、transform.rotationです。rotationは和訳すると回転なので、そのままの意味です。

transformの特徴

transformは、すべてのオブジェクトに保有されているという特徴があります。Unityでオブジェクトを設定すると必ずTransformの編集画面が付いているので、そこから操作することも可能です。

初期の座標の設定はGUIでも可能ですが、回転するためには当然初期の状態から座標を変える必要があります。そのためGUIではなくプログラミングしていくことになります。サンプルコードについては、ワールド座標とローカル座標に分けて後述していきます。

transform.rotationの使い方

オブジェクトの作り方や座標の話は割愛しますが、それぞれを任意に設定しておきます。そして次に、transform.rotationを使ってワールド座標を取得していきます。なぜなら回転を制御するためには角度の取得が必須だからです。サンプルコードは以下のようになります。

ワールド座標を基準にして角度を取得する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        Vector3 worldAngle = sampleTransform.eulerAngles;
        float world_angle_x = worldAngle.x;
        float world_angle_y = worldAngle.y;
        float world_angle_z = worldAngle.z;
    }
}

処理の流れとしては、まずtransformを取得します。newするのではなく、thisという風に指定しています。次にワールド座標をもとにして回転を取得しています。Vector3とは角度の取得編集ができる型で、そのクラス型のオブジェクトを生成し、角度取得のメソッドを使用しています。

ローカル座標を基準にして角度を取得する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        Vector3 localAngle = sampleTransform.localEulerAngles;
        float local_angle_x = localAngle.x;
        float local_angle_x = localAngle.y;
        float local_angle_x = localAngle.z;
    }
}

ワールド座標と同様に、ローカル座標も取得できます。書き方はほぼ同じです。

transform.rotationを変更する

transform.rotationの取得方法は上記の通りですが、次にtransform.rotationを変更する方法を紹介します。transform.rotationを変更すると、現在設定されている角度が変わります。サンプルコードは以下です。

ワールド座標の角度を変更する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        Vector3 worldAngle = sampleTransform.eulerAngles;
        worldAngle.x = 10.0f;
        worldAngle.y = 10.0f;
        worldAngle.z = 10.0f; /
        sampleTransform.eulerAngles = worldAngle;

    }
}

transformを取得し、ワールド座標を基準にして回転を取得しました。

ローカル座標の角度を変更する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        Vector3 localAngle = sampleTransform.localEulerAngles;
        localAngle.x = 10.0f;
        localAngle.y = 10.0f;
        localAngle.z = 10.0f;
        sampleTransform.localEulerAngles = localAngle;

    }
}

ローカル座標の場合もワールド座標と流れは同じです。

rotateメソッドで角度を変更する

上で紹介した方法でもtransform.rotationに変更を加えていましたが、以下に紹介する方法ではtransform.Rotationを使用して変更を加えます。サンプルコードは以下です。

ワールド座標を基準に角度を変更する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        sampleTransform.Rotate (1.0f, 1.0f, 1.0f, Space.World );
    }
}

transform.Rotationで角度を変更しました。Space.Worldはワールド座標基準で回転を指定するコードです。第四引数に設定しますが、デフォルトではローカル座標に設定されています。

ローカル座標を基準に角度を変更する

public class MainCharacter : MonoBehaviour {
    void Change () {
        Transform sampleTransform = this.transform;

        sampleTransform.Rotate (1.0f, 1.0f, 1.0f);
    }
}

ローカル座標の場合もワールド座標とコードはほぼ同じです。ただしローカル座標の場合はRotateの第四引数に何も設定する必要がありません。

まとめ

以上オブジェクトを回転させる方法について解説してきました。回転は座標を指定していく必要があるので最初は混乱し、コードを書いて実行しても変な動きになるかもしれません。

それはそれで面白いのですが、失敗することも想定して時間に余裕を持って取り組んだ方が良いかもしれません。短時間で効率的に実装できればベストなのですが、説明を読んでも座標の動きがいまいちよくわからない、といったことがあるので、何回か値を変えながら理解していく必要があるかと思います。

三次元の座標の扱いにもともと慣れている人なら問題ないかと思いますが、多くの人は二次元でないとイメージしにくいと思うので、最初はうまくいかずに戸惑うかもしれないということです。

それでも慣れれば思い通りに動かせるのでしばらくのトライ&エラーです。

Unity関連記事
1, 【unityのフリーランス求人・案件情報】エンジニア需要や開発単価、未経験でもいける?
2, 【unity入門】ゲーム開発だけじゃない、Unityで出来ること
3, UnityでMMDモデルを自由自在に動かしてみよう!
4, (この記事)Unityでオブジェクトを回転させる方法をわかりやすくまとめました
5, Unityで簡単にアニメーションを作成する方法をまとめました
6, Unity adsを使って簡単に広告を導入しよう
7, Unityのパーティクルを使って演出できるエフェクト例
8, Unityのtransformを使ってオブジェクトの座標や回転を操作する
9, Unityのコルーチンとは?使い方をまとめました
10, Unityのアセットストアの上手な使い方
11, Unityのアニメーターを簡単に作成する方法まとめ
12, UnityのShaderの解説と使い方まとめました
13, Unityのrigidbodyを使って物理演算を導入してみよう
14, Unityを使って半日でFPSゲームを作ってみよう

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する