【Unity】Rotateメソッドとは?オブジェクトを回転できる

Rotateメソッドとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのRotateメソッドが知りたい。」

「Rotateってどうやって使うの?」

というお悩みの方に向けた内容となっています。

Unity上でオブジェクトの向きを変えたり回転させたい場合に、Rotateメソッドが使われます。

このRotateメソッドは、引数に回転量を指定することで、そのオブジェクトを回転させることができるTransformコンポーネントで定義されているメソッドです。

Unityでは、他にもQuaternionを使った回転などの方法がありますが、Rotateは直観的に回転させることができる関数です。

そこで、このページでは、UnityのRotateメソッドについて、どんな特徴があるのか、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Rotateメソッドとは?

まずは、Rotateメソッドでどういうことができるのかを紹介していきます。

オブジェクトを回転できるメソッド

Rotateメソッドは、冒頭でも解説した通り、オブジェクトを回転させることができるメソッドです。

まず、 オブジェクトの向きや回転を管理しているのは、TransformコンポーネントにあるRotationという変数で行っています。

このRotationの項目で、それぞれのx軸・y軸・z軸に対して、どの程度オブジェクトを回転させるかといった角度を管理しています。

そして、Rotateメソッドは、このRotationで管理されているそれぞれの数値に変更を加えることができ、これによりオブジェクトを回転させることができます。

なお、RotateメソッドもTransformコンポーネントで定義されているメソッドの一つです。

複雑な回転はQuaternionの方が便利

Unityでオブジェクトを回転させる方法はいくつかありますが、Rotateメソッドだと出来ることが限られてしまう場合があります。

例えば、

といった際に、Rotateメソッドだとなかなか手間がかかってしまいます。

このような複雑な回転を作っていく場合は、Quaternionという仕組みを使っていくのが簡単です。

Quaternionは、Unity内のオブジェクトのすべての回転を表すのに使われている仕組みで、四元数と呼ばれる4つの要素で回転を表しています。

そのため、オブジェクトのシンプルな回転であればRotateメソッドを使っていき、少し複雑な回転を作る場合はQuaternionを使っていきましょう。

Rotateメソッドの使い方

ここからは、Rotateメソッドの使い方についてまとめていきます。

transform.Rotateの引数で回転量を指定

Rotateメソッドは、Transformコンポーネントに定義されているメソッドなので、

transform.Rotate(回転量);

と書いてあげることで、引数の分オブジェクトを回転させることができます。

また回転量の指定は、Vector3型もしくはfloat型でx,y,zの角度の数値を順番に指定してあげます。

transform.Rotate(Vector3);
transform.Rotate(float x, float y, float z);

例えば、

using UnityEngine;

public class Test : MonoBehaviour
{
    Vector3 cubeRotate = new Vector3(0.5f, 0.5f, 0);    // Vector3型の変数

    void Update()
    {
        transform.Rotate(cubeRotate);   // オブジェクトを回転させる
    }
}

上記のようにUpdate内にRotateメソッドを書くことで、オブジェクトを常に回転させておくことができます。

また、以下のようにif文の中で書いてあげることで、

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Rotate(0.1f, 0, 0);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Rotate(-0.1f, 0, 0);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Rotate(0, 0.1f, 0);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Rotate(0, -0.1f, 0);
        }
    }
}

矢印キーに合わせてオブジェクトを回転させるといったことができるようになります。

ワールド座標でも回転できる

Rotateメソッドは、一番後ろの引数でワールド座標かローカル座標のどちらで回転させるかを指定することができます。

transform.Rotate(回転量, ワールド座標かローカル座標);

ワールド座標で回転させたい場合は「Space.World」、ローカル座標で回転させたい場合は「Space.Self」を記述します。

また、この引数を省略すると、「Space.Self」を指定したのと同じローカル座標で回転させることになります。

例えば、先ほどの矢印キーに合わせたオブジェクトの回転処理の場合、ローカル座標だとオブジェクトの向き次第で回転の方向が変わります。

これをワールド座標で回転させることで、オブジェクト自体の向きとは関係なく、常に同じ方向に回転させることができるようになります。

using UnityEngine;

public class Test : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Rotate(0.1f, 0, 0, Space.World);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Rotate(-0.1f, 0, 0, Space.World);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Rotate(0, 0.1f, 0, Space.World);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Rotate(0, -0.1f, 0, Space.World);
        }
    }
}

少し分かりにくいですが、先ほどとは違いオブジェクトの向きに関係なく、上下左右に回転しているのがわかります。

まとめ

このページでは、Unityで使うことができるRotateメソッドについて、どんなメソッドなのか、特徴や使い方についてまとめていきましたが、いかがでしたでしょうか?

Rotateメソッドは、Transformコンポーネントで定義されているオブジェクトを回転させることができるメソッドです。

Rotateの引数で回転量を指定してあげることで、その分オブジェクトを回転させることができます。

また、一番後ろの引数で、ワールド座標かローカル座標のどちらで回転させるかを決めることもできます。

最後までお読みいただきまして、ありがとうございました!

コメント