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上。
ButtonLongPressClick.jpg

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值