还在用Update计时器实现各种流程控制和状态判断吗?今次介绍一下使用UnityEvents实现uGUI的长按状态检测。效果案例是我们常见的微信长按弹出菜单。
使用事件,首先需要添加引用。
using UnityEngine;在继承后面添加接口,用来获取UI状态。
using UnityEngine.Events;
using UnityEngine.EventSystems;
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();实现这个OnLongPress事件,以及在事件中要执行的函数Haha。
private float holdTime = 1f;
private void OnLongPress()这样我们就可以在Inspector里面像OnClick这些默认事件一样,使用我们的自定义事件了。
{
onLongPress.Invoke();
}
public void Haha()
{
Debug.Log("Haha");
menu.gameObject.SetActive(true);
}
上面主要是讲解,如果有不理解的地方可以下载这个案例来学习。