Unity事件系统实现uGUI Button长按

时间:2022-02-26 23:42:12

还在用Update计时器实现各种流程控制和状态判断吗?今次介绍一下使用UnityEvents实现uGUI的长按状态检测。效果案例是我们常见的微信长按弹出菜单。

Unity事件系统实现uGUI Button长按

使用事件,首先需要添加引用。

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
在继承后面添加接口,用来获取UI状态。

public class Example : MonoBehaviour //继承
, IPointerClickHandler //接口
, IPointerExitHandler
, IPointerDownHandler

添加完,发现Handler下面都有波浪线错误提示。通过定义带EventData形参的对应函数,实现接口。

public void OnPointerClick(PointerEventData eventData)
{
//print("I was clicked:" + eventData.pointerCurrentRaycast.gameObject.name);
}

public void OnPointerExit(PointerEventData eventData)
{
CancelInvoke("OnLongPress");
}

public void OnPointerDown(PointerEventData eventData)
{
menu.position = eventData.position;
menu.pivot = new Vector2(eventData.position.x/Screen.width, eventData.position.y/Screen.height);
menu.gameObject.SetActive(false);

Invoke("OnLongPress", holdTime);
}

public void OnPointerUp(PointerEventData eventData)
{
CancelInvoke("OnLongPress");
}

声明一个Unity事件,以及一个长按时间的变量。

public UnityEvent onLongPress = new UnityEvent();
private float holdTime = 1f;
实现这个OnLongPress事件,以及在事件中要执行的函数Haha。

private void OnLongPress()
{
onLongPress.Invoke();
}

public void Haha()
{
Debug.Log("Haha");
menu.gameObject.SetActive(true);
}
这样我们就可以在Inspector里面像OnClick这些默认事件一样,使用我们的自定义事件了。

Unity事件系统实现uGUI Button长按


上面主要是讲解,如果有不理解的地方可以下载这个案例来学习。

下载地址