Unity3D UGUI按钮长按事件

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上。


Unity3D UGUI按钮长按事件_第1张图片
ButtonLongPressClick.jpg

如果你希望在侦听长按时间的同时,也能侦听点击事件,就把上面脚本中注释掉的代码取消注释就可以了。
更多Unity相关教程,请关注微信公众号UnityAsk。


Unity3D UGUI按钮长按事件_第2张图片

你可能感兴趣的:(Unity3D UGUI按钮长按事件)