Unity事件系统实现uGUI Button长按

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



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

下载地址


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值