うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】あるオブジェクトを中心に回転させる

Transform.RotateAround を利用することで、対象のオブジェクト方を向きながら回転させることができる

この際に対象のオブジェクトとの距離は呼び出したタイミングの距離なので開始時に対象の位置に移動させている

そうすることで以下のように回転させることができる

using UnityEngine;

public class RotateSphere : MonoBehaviour
{
    [SerializeField]
    private Transform _target;
    [SerializeField]
    private float _speed = 10f;
    [SerializeField]
    private float _radius = 0.5f;

    private void Start()
    {
        // RotateAround は現在の距離が半径として計算されるので、予め対象半径の位置に移動する
        transform.position = _radius * (transform.position - _target.position).normalized + _target.position;       
    }

    private void Update()
    {
        if (Input.anyKey)
        {
            if (Input.GetKey(KeyCode.W))
            {
                transform.RotateAround(_target.position, transform.right, _speed);
            }
            if (Input.GetKey(KeyCode.S))
            {
                transform.RotateAround(_target.position, transform.right, -_speed);
            }
            
            if (Input.GetKey(KeyCode.A))
            {
                transform.RotateAround(_target.position, transform.up, _speed);
            }
            if (Input.GetKey(KeyCode.D))
            {
                transform.RotateAround(_target.position, transform.up, -_speed);
            }
        }
    }
}