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脚本中的使用方法的示例,如下截图中所示:

猜你喜欢

转载自blog.csdn.net/tianyuhua19890217/article/details/136572796