Unity事件系统实现uGUI Button长按

xiaoxiao2021-02-27  209

还在用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这些默认事件一样,使用我们的自定义事件了。

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

下载地址

转载请注明原文地址: https://www.6miu.com/read-11343.html

最新回复(0)