还在用Update计时器实现各种流程控制和状态判断吗?今次介绍一下使用UnityEvents实现uGUI的长按状态检测。效果案例是我们常见的微信长按弹出菜单。
使用事件,首先需要添加引用。
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这些默认事件一样,使用我们的自定义事件了。
上面主要是讲解,如果有不理解的地方可以下载这个案例来学习。
下载地址
