首页 > 代码库 > UGUI 实现Button长按效果(RepeatButton)
UGUI 实现Button长按效果(RepeatButton)
Tag:加入了一个延迟,在button按下状态一段时间后再開始 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; } }
在商店中购买、在背包中出售、使用一种物品的情况下。须要对button进行长按处理,来高速添加或降低 物品个数。在Unity的 GUI中有一个RepeatButton能够用。在NGUI中有OnPressed 回调能够使用,可是在 UGUI 中的 Button 并没有这样的功能。就须要自己加入。
原理:
处理 Unity 的点击事件
IPointerDownHandler IPointerUpHandler IPointerExitHandler
在鼠标 按下的状态、松开、以及鼠标离开的状态来进行状态控制。
代码:
using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using System.Collections; public class RepeatPressEventTrigger :MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler { public float interval=0.1f; [SerializeField] UnityEvent m_OnLongpress=new UnityEvent(); private bool isPointDown=false; private 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 上面 (当然其他控件也能够) 。然后设置 长按的回调函数 以及 调用间隔。
长按button。就会依照设定的间隔事件 。不停得调用 指定的 OnLongPress 函数。
样例下载:
http://download.csdn.net/detail/cp790621656/8794181
UGUI 实现Button长按效果(RepeatButton)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。