本日は Unity の小ネタ枠です。
指定のトランスフォームを中心にオブジェクトを回転させる方法を記事にします。
Transform.RotateAround
指定の座標を中心にオブジェクトを回転させるには Transform.RotateAround 関数を利用します。
docs.unity3d.com
public void RotateAround (Vector3 point, Vector3 axis, float angle);
引数 | 説明 |
---|---|
point | 中心となるワールド座標 |
axis | 回転軸 |
angle | 回転角度(度数) |
サンプルシーン
以下のサンプルスクリプトを作成しました。
・RotateAroundTarget.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateAroundTarget : MonoBehaviour { [SerializeField, Tooltip("ターゲットオブジェクト")] private GameObject TargetObject; [SerializeField, Tooltip("回転軸")] private Vector3 RotateAxis = Vector3.up; [SerializeField, Tooltip("速度係数")] private float SpeedFactor = 0.1f; void Update() { if (TargetObject == null) return; // 指定オブジェクトを中心に回転する this.transform.RotateAround( TargetObject.transform.position, RotateAxis, 360.0f / (1.0f / SpeedFactor) * Time.deltaTime ); } }
シーンに Sphere オブジェクトを作成し、本スクリプトを追加します。
中心となるオブジェクトを配置して[TargetObject]に指定します。
動作確認
シーンを再生して動作を確認します。
指定オブジェクトの周囲を Sphere が回転します。
ただし、この方法では半径距離をチェックしていないため、ターゲットオブジェクトが移動すると回転半径が変わってしまいます。
回転の半径距離を一定に保ちつつ、オブジェクトを回転させる方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com