Unity实现UI按钮Button的按下、抬起、移出、移入事件

在项目过程中,经常遇到unity内响应鼠标按下,抬起等情况的交互监听,但是unity的button组件编写代码时,能直接添加侦听的事件是onClick事件,没有按下、抬起、移出、移入,需要自己进行重写,所以将自己的编写使用过程记录下来以供学习,不足之处请见谅,希望能给各位同行带来便利。

实现思路:

1、重新写类,继承Button,在类中实现相关的事件响应。

2、将类挂载到Cavas下创建的Button按钮上,挂载之前需先移除Button默认的组件button。

3、编写代码给按钮添加事件,这一步与Unity的Button按钮的 onClick.AddListener 用法一样。

注意事项:

 1、因为这个类已经继承了Button,所有在Cavas下创建完button按钮时,切记将默认的Button组件删除,将上面这个类挂载到刚创建的button上,不然会提示重复,挂载不成功。

2、在脚本中声明按钮时,将变量类型由原来的Button类型改为MyButton,这是因为我们下一步在执行GetComponent时,< >中的类型将使用MyButton。然后就可以按照普通button的onClick添加侦听函数的写法,添加不同的操作监听了。

MyButton类的代码如下:


using UnityEngine.EventSystems;
using UnityEngine.UI;
using TMPro;
using UnityEngine.Events;

public class MyButton : Button,IPointerExitHandler,IPointerEnterHandler
{
    public UnityEvent onButtonDown;
    public UnityEvent onButtonUp;
    public UnityEvent onButtonExit;
    public UnityEvent onButtonEnter;
    // 当按钮被按下时调用
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
        if (onButtonDown != null)
            onButtonDown.Invoke();
        //gameObject.GetComponentInChildren<TMP_Text>().text = "Pressed";
    }

    // 当按钮被抬起时调用
    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);
        if (onButtonUp != null)
            onButtonUp.Invoke();
        //gameObject.GetComponentInChildren<TMP_Text>().text = "Released";
    }

    // 当鼠标从按钮上离开时调用
    public override void OnPointerExit(PointerEventData eventData)
    {
        base.OnPointerExit(eventData);
        if (onButtonExit != null)
            onButtonExit.Invoke();
        //gameObject.GetComponentInChildren<TMP_Text>().text = "Exit";
    }

    // 当鼠标从外面进入到按钮上方时调用
    public override void OnPointerEnter(PointerEventData eventData)
    {
        base.OnPointerEnter(eventData);
        if (onButtonEnter != null)
            onButtonEnter.Invoke();
        //gameObject.GetComponentInChildren<TMP_Text>().text = "Enter";
    }
}

Unity脚本中的使用方法的示例,如下截图中所示:

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值