博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UGUI 实现Button长按效果(RepeatButton)
阅读量:6612 次
发布时间:2019-06-24

本文共 2632 字,大约阅读时间需要 8 分钟。

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 的点击事件

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

代码:

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

你可能感兴趣的文章
一家以色列公司要帮FBI解锁iPhone
查看>>
IT企业的云存储安全方法都是错的
查看>>
英特尔进军穿戴和物联网 RealSense技术成标配
查看>>
比特币等公有链不适合物联网行业?物联网需要专用区块链
查看>>
Worktile企业版上线 满足互联网时代的办公新需求
查看>>
RSA加密或成历史 麻省理工研制出5原子量子计算机
查看>>
致所有测试人员的信
查看>>
Microsoft将在VS 2017中提供“实时单元测试”特性
查看>>
印度有望挤下日本 成2017年全球第三大光伏市场
查看>>
自动化测试如何解决验证码的问题
查看>>
大数据让景区更智慧
查看>>
希腊央行网站成黑客“盘中餐”:上了头条才猛醒
查看>>
储能式UPS在数据中心的应用探讨
查看>>
最新EMC全球调查凸显网络威胁影响
查看>>
如何用Tensorflow实现RNN?本文将带你进一步研究
查看>>
想去英国 因为他们是移动连接速度之王
查看>>
微信企业版曝光 移动办公协同市场怎么走?
查看>>
C#日期格式化
查看>>
被企业微信吓到了吗?离做到极致还早
查看>>
机器学习如何威胁企业安全
查看>>