UGUI 实现Button长按效果 RepeatButton

               

Tag:添加了一个延迟,在按钮按下状态一段时间后再开始 repeate

using UnityEngine;using UnityEngine.Events;using UnityEngine.EventSystems;using System.Collections;public class RepeatPressEventTrigger : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler{    public float interval = 0.1f; //回调触发间隔时间;    public float delay = 1.0f;//延迟时间;    public  UnityEvent onLongPress = new UnityEvent();    private bool isPointDown = false;    private float lastInvokeTime;    private float m_Delay = 0f;    // Use this for initialization    void Start()    {        m_Delay = delay;    }    // Update is called once per frame    void Update()    {        if (isPointDown)        {            if ((m_Delay -= Time.deltaTime) > 0f)            {                return;            }            if (Time.time - lastInvokeTime > interval)            {                //触发点击;                onLongPress.Invoke();                lastInvokeTime = Time.time;            }        }    }    public void OnPointerDown(PointerEventData eventData)    {        isPointDown = true;        m_Delay = delay;    }    public void OnPointerUp(PointerEventData eventData)    {        isPointDown = false;        m_Delay = delay;    }    public void OnPointerExit(PointerEventData eventData)    {        isPointDown = false;        m_Delay = delay;    }}



在商店中购买、在背包中出售、使用一种物品的情况下,需要对按钮进行长按处理,来快速增加或减少 物品个数。在Unity的 GUI中有一个RepeatButton可以用,在NGUI中有OnPressed 回调可以使用,但是在 UGUI 中的 Button 并没有这种功能,就需要自己添加。


原理:

处理 Unity 的点击事件

IPointerDownHandlerIPointerUpHandlerIPointerExitHandler


在鼠标 按下的状态、松开、以及鼠标离开的状态来进行状态控制。


代码:

using UnityEngine;using UnityEngine.Events;using UnityEngine.EventSystems;using System.Collections;public class RepeatPressEventTrigger :MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandlerpublic float interval=0.1f; [SerializeField] UnityEvent m_OnLongpress=new UnityEvent(); private bool isPointDown=falseprivate float lastInvokeTime; // Use this for initialization void Start ({ }  // Update is called once per frame void Update ({  if(isPointDown)  {   if(Time.time-lastInvokeTime>interval)   {    //触发点击;    m_OnLongpress.Invoke();    lastInvokeTime=Time.time;   }  } } public void OnPointerDown (PointerEventData eventData{  m_OnLongpress.Invoke();  isPointDown = true;  lastInvokeTime = Time.time; } public void OnPointerUp (PointerEventData eventData{  isPointDown = false; } public void OnPointerExit (PointerEventData eventData{  isPointDown = false; }}


使用方法:

把脚本挂在 Button 上面 (当然其它控件也可以) ,然后设置 长按的回调函数 以及 调用间隔。


长按按钮,就会按照设定的间隔事件 ,不停得调用 指定的 OnLongPress 函数。


例子下载:

http://download.csdn.net/detail/cp790621656/8794181


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值