うにてぃブログ

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

【Unity】ドラッグ操作によるオブジェクトの回転:Space.Worldを考慮した正確な方法

オブジェクトをドラッグした方向に回転させるには、Transform.Rotateを使用します。

以下の例では、ドラッグの方向にオブジェクトを回転させる方法を示しています。

using UnityEngine;
using UnityEngine.EventSystems;

public class RotationTest : MonoBehaviour, IDragHandler
{
    [SerializeField]
    private Transform _target;
    [SerializeField]
    private float _speed = 1f;

    public void OnDrag(PointerEventData eventData)
    {
        _target.Rotate(Vector3.up, eventData.delta.x * -_speed);
        _target.Rotate(Vector3.right, eventData.delta.y * _speed);
    }
}

しかし、一度回転させた後にさらに回転させると、回転後の軸を考慮していないため、奇妙な回転が発生します。

これを正しく考慮するには、次のようにSpace.Worldを使用します。

        _target.Rotate(Vector3.up, eventData.delta.x * -_speed, Space.World);
        _target.Rotate(Vector3.right, eventData.delta.y * _speed, Space.World);

これにより、回転が正しく行われます。