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

您所在的位置:网站首页 按下按钮的英文怎么写的 Unity实现UI按钮Button的按下、抬起、移出、移入事件

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

2024-07-10 20:23| 来源: 网络整理| 查看: 265

在项目过程中,经常遇到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().text = "Pressed";     }

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

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

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3