Unity の Transform コンポーネントの Rotate メソッド と RotateAround メソッド の挙動について、実際に動かしながら、挙動を確認してみたいと思います。
まず、回転した際に分かりやすい形をしている 3Dモデル を準備します。
Transform.Rotate
実際にコンポーネントをオブジェクトにアタッチして試してみます
using UnityEngine;
public class Example : MonoBehaviour
{
void Update()
{
transform.Rotate(0, 0.1f, 0, Space.Self);
}
}
続いて、車のオブジェクトを X軸 を中心に 90° 回転させた状態にして、ゲームを再生してみます。
さきほどと同じく、ワールド座標のY軸側から見てみると、同じソースコードですが、違う回転をしていることが確認できます。これは Inspector 上でオブジェクトを回転させ、オブジェクトの持つローカルのY軸の向きが変わったことによる影響です。ここで、ソースコードを少し変更してみます。
transform.Rotate(0, 0.1f, 0, Space.World);
transform.Rotate()
の第四引数に Space.World
を指定することによって、ワールド座標軸でオブジェクトを回転させることができます。
Transform.RotateAround
using UnityEngine;
public class Example : MonoBehaviour
{
// 回転の中心にしたいオブジェクトを指定
public GameObject target;
void Update()
{
// アタッチしたオブジェクトを target を中心に1秒間に 20° 回転させる
transform.RotateAround(target.transform.position, Vector3.up, 20 * Time.deltaTime);
}
}
実際にコンポーネントをオブジェクトにアタッチして、オブジェクト自身をターゲットに設定した場合
実際にコンポーネントをオブジェクトにアタッチして、ターゲットを他のオブジェクトに設定した場合
- 回転の中心となるオブジェクト (Sphere) を追加
- 回転させたいオブジェクトにアタッチした Example コンポーネントの Target に Sphere をセット
さきほどの回転の動きとは異なり、追加した Sphere を中心に回転するようになりました。
以上。