MRが楽しい

MRやVRについて学習したことを書き残す

指定のトランスフォームを中心にオブジェクトを回転させる

本日は Unity の小ネタ枠です。
指定のトランスフォームを中心にオブジェクトを回転させる方法を記事にします。
f:id:bluebirdofoz:20210704235304j:plain

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
            );
    }
}

f:id:bluebirdofoz:20210704235332j:plain

シーンに Sphere オブジェクトを作成し、本スクリプトを追加します。
f:id:bluebirdofoz:20210704235352j:plain

中心となるオブジェクトを配置して[TargetObject]に指定します。
f:id:bluebirdofoz:20210704235404j:plain

動作確認

シーンを再生して動作を確認します。
指定オブジェクトの周囲を Sphere が回転します。
f:id:bluebirdofoz:20210704235414j:plain

ただし、この方法では半径距離をチェックしていないため、ターゲットオブジェクトが移動すると回転半径が変わってしまいます。
回転の半径距離を一定に保ちつつ、オブジェクトを回転させる方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com