【Unity】transform.Rotate()でオブジェクトを回転させる

【Unity】transform.Rotate()でオブジェクトを回転させる Unity
記事内に広告が含まれています。
スポンサーリンク

記事作成時の動作環境

  • Unity 2022.3.22f1

transform.Rotate()

それぞれの軸に対して、回転させる角度をオイラー角で指定します。

public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
  • xAngle … x軸を中心に回転させる角度
  • yAngle … y軸を中心に回転させる角度
  • zAngle … z軸を中心に回転させる角度
  • relativeTo … オブジェクトに対してローカルに回転させるか(Space.Self)、シーンに対して相対的に回転させるか(Space.World)※省略可能

指定した角度にオブジェクトを回転させるのではなく、指定した角度がオブジェクトの現在の角度にプラスされます。

そのため、Update内で書けば同じ方向に同じ角度で回転し続けます。

floatで個別に角度を指定するのではなく、Vector3でまとめて指定することもできます。

public void Rotate(Vector3 eulers, Space relativeTo = Space.Self);
  • eulers … 回転させる角度
  • relativeTo … オブジェクトに対してローカルに回転させるか(Space.Self)、シーンに対して相対的に回転させるか(Space.World)※省略可能

軸と角度を別々で指定することもできます。

public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
  • axis … 回転させる軸
  • angle … 回転させる角度
  • relativeTo … オブジェクトに対してローカルに回転させるか(Space.Self)、シーンに対して相対的に回転させるか(Space.World)※省略可能

例えば、次のコードは全て同じ動きになります。

transform.Rotate(0.0f, 0.0f, 1.0f);

transform.Rotate(new Vector3(0, 0, 1));

// Vector3.forward は Vector3(0, 0, 1) と同じ
transform.Rotate(Vector3.forward, 1.0f);

Space.SelfとSpace.Worldの違い

Space.SelfとSpace.Worldの動きの違いについて、実際に動かして確認してみます。

2つのCubeを作成します。

違いが分かるようにするため、Rotationの初期値をどちらも(0, 0, 90)にしています。

指定した方向・角度に回転し続けるスクリプトを作成します。

using UnityEngine;

public class RotateTest : MonoBehaviour
{
    public GameObject obj_self, obj_world;
    public float x_angle, y_angle, z_angle;

    void Update()
    {
        obj_self.transform.Rotate(x_angle, y_angle, z_angle, Space.Self);
        obj_world.transform.Rotate(x_angle, y_angle, z_angle, Space.World);
    }
}

スクリプトを空のオブジェクトにアタッチし、Cubeオブジェクトと各軸の回転角度を設定します。

実行してみると、Space.SelfとSpace.Worldで回転方向が異なっていることが分かります。

Selfはオブジェクトが基準になるのに対しWorldはシーンが基準になるため、同じ角度を指定しても回転方向が変わります。

Sceneビューで変形ツールのギズモハンドル位置を切り替えると違いが分かりやすいです。

参考

コメント

タイトルとURLをコピーしました