美文网首页
Unity3D UGUI按钮长按事件

Unity3D UGUI按钮长按事件

作者: UnityAsk | 来源:发表于2019-08-16 22:39 被阅读0次

    UGUI 对按钮提供了 onClick事件侦听,但是没有长按事件。
    网上看了些教程,大都是通过在Update里面计时来实现。

    下面通过Invoke来实现。这样不需要每帧都引入Update计算。
    Invoke 在一个固定的时间之后调用一个函数。我们将这个时间设置为 holdTime = 1f;单位为秒。当按键松开或者从按钮上移开时,调用CancelInvoke() 取消延时调用。

    using UnityEngine;
    using UnityEngine.Events;
    using UnityEngine.EventSystems;
     
    public class ButtonLongPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
    {
        [SerializeField]
        [Tooltip("How long must pointer be down on this object to trigger a long press")]
        private float holdTime = 1f;
     
        // 如果希望侦听点击事件,就把这些注释全掉取消掉
        //private bool held = false;
        //public UnityEvent onClick = new UnityEvent();
     
        public UnityEvent onLongPress = new UnityEvent();
     
        public void OnPointerDown(PointerEventData eventData)
        {
            //held = false;
            Invoke("OnLongPress", holdTime);
        }
     
        public void OnPointerUp(PointerEventData eventData)
        {
            CancelInvoke("OnLongPress");
     
            //if (!held)
            //    onClick.Invoke();
        }
     
        public void OnPointerExit(PointerEventData eventData)
        {
            CancelInvoke("OnLongPress");
        }
     
        private void OnLongPress()
        {
            //held = true;
            onLongPress.Invoke();
        }
    }
    

    我们可以将这个脚本挂到Button上。


    ButtonLongPressClick.jpg

    如果你希望在侦听长按时间的同时,也能侦听点击事件,就把上面脚本中注释掉的代码取消注释就可以了。

    相关文章

      网友评论

          本文标题:Unity3D UGUI按钮长按事件

          本文链接:https://www.haomeiwen.com/subject/ffbpjctx.html