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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值