unity ui物体旋转事件

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class MTest : MonoBehaviour
{
    
    
    public GameObject m_rotateObj;

    private readonly static float m_rotateSpeed = 0.4f;

    private void Awake()
    {
    
    
        RotationModle();
    }

    /// <summary>
    /// 添加旋转事件
    /// </summary>
    private void RotationModle()
    {
    
    
        //添加拖动旋转
        var graphic = m_rotateObj.GetComponent<Graphic>();
        if (graphic != null && graphic.raycastTarget)
        {
    
    
            var trigger = m_rotateObj.AddComponent<EventTrigger>();
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.Drag;
            entry.callback = new EventTrigger.TriggerEvent();
            entry.callback.AddListener(TriggerOnDrag);
            trigger.triggers.Add(entry);
        }
    }

    /// <summary>
    /// 旋转事件
    /// </summary>
    /// <param name="arg0"></param>
    private void TriggerOnDrag(BaseEventData arg0)
    {
    
    
        if (m_rotateObj == null)
        {
    
    
            return;
        }

        var pointerEventData = (PointerEventData)arg0;
        var rot = Quaternion.Euler(0, -pointerEventData.delta.x * m_rotateSpeed, 0);
        m_rotateObj.transform.forward = rot * m_rotateObj.transform.forward;
    }

猜你喜欢

转载自blog.csdn.net/weixin_47819574/article/details/129493195
今日推荐