UGUI 实现Button长按效果(RepeatButton)

摘要:
您需要长时间按下按钮以高速添加或减少项目数量。可以在Unity的GUI中使用RepeatButton。OnPressed回调可以在NGUI中使用,但UGUI中的Button不使用。代码:usingUnityEngine;使用UnityEngine。事件;使用UnityEngine。事件系统;使用系统。收藏;PublicclassRepeatPressEventTrigger:MonoBehavior、IPointerDownHandler、IPointer UpHandler、,IPointerExitHandler{publicfloatinterval=0.1f;[SerializeField]UnityEventm_OnLongpress=newUnityEvent();privatepoolPointDown=false;privateflalastInvokeTime;//使用thiinitiationvoid Start(){}//UpdateiscalledonseperframewoidUpdate(){{if{//触发器单击;m_OnLongpress.Invoke();lastInvokeTime=Time.Time;}}publicvoidOnPointerDown{m_OnLongpress.Invoke();isPointDown=true;lastInvokeTime=Time.Time;}publicvoidOnPointerUp{isPointDown=false;}publicvoidOnPointerExit{isPointDown=false;}}用法:将脚本挂在Button上。事件将根据设置的间隔发生。不断调用指定的OnLongPress函数。

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 上面 (当然其他控件也能够) 。然后设置 长按的回调函数 以及 调用间隔。

UGUI 实现Button长按效果(RepeatButton)第1张


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


样例下载:

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


免责声明:文章转载自《UGUI 实现Button长按效果(RepeatButton)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇机器学习(ML)十二之编码解码器、束搜索与注意力机制Hibernate下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IOS键盘样式风格有关设置

一、键盘风格 UIKit框架支持8种风格键盘。 typedefenum{ UIKeyboardTypeDefault,//默认键盘:支持所有字符 UIKeyboardTypeASCIICapable,//支持ASCII的默认键盘 UIKeyboardTypeNumbersAndPunctuation,//标准电话键盘,支持+*#等符号 UIKe...

VC中Spin控件的使用

微调按钮设置成set buddy inter选上 然后可以(1)通过 setbuddy+setrange函数    或(2)auto buddy自动选上,只要编辑框的tab order 比微调按钮小1就可以自动了 (另转)VC中Spin控件的使用 http://leichaofu.blog.163.com/blog/static/459481820098...

Qt 设置button互斥,一组button只能选中一个

Qt 设置button互斥,一组button只能选中一个 目录 Qt 设置button互斥,一组button只能选中一个 一、同一容器内互斥 二、不同容器内互斥 一、同一容器内互斥 效果 先在界面是拖入一个控件容器,这里以QGroupBox为例 再放进来几个按钮控件 设置按钮属性,第一个红框勾选是设置按钮可选,第二个勾选就是设置自动互斥...

Bootstrap-菜单,导航,按钮

1、下拉菜单(基本用法) 在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件:   ☑  LESS版本:对应的源码文件为 dropdowns.less   ☑  Sass版本:对应的源码文件为 _dropdowns.scss   ☑  编译后的Bootstrap版本:查看bootstrap.css文件第3004行~第31...

电子签名实现的思路、困难及解决方案

        在办公自动化的流程中希望实现电子签名。        思路:            1、图片的存放:安全起见存放在库中为宜。最好不能被轻易下载。            2、使用的过程:显示一个密码框和“签名”按钮,输入密码并按下按钮后,如果正确,隐藏输入框和按钮,显示图片。            3、我的所有控件都是通过解析xml后动态生成...

【第九节】PyQt 拖拽

在这部分PyQt5教程中,我们将讨论拖拽相关操作。 在计算机图形用户界面中,拖放的操作(或支持的作用)点击虚拟对象和拖动到另一个位置或到另一个虚拟对象。一般来说,它可以用于调用多种行动,或创建各种类型的两个抽象对象之间的关联。拖放是图形用户界面的一部分。拖拽操作让用户直观地做复杂的事情。通常,我们可以拖放两件事:数据或一些图形对象。如果我们把一个图像从一个...