实现思路,
1、重新写类,继承Button,在类中实现相关的事件响应。
2、将类挂载到Cavas下创建的Button按钮上,挂载之前需先移除Button默认的组件button。
3、编写代码给按钮添加事件,这一步与默认的 onClick.AddListener 用法没什么区别。
个人认为这种方法比较灵活,做个记录,方便使用。
注意事项:
1、在脚本中引用Button按钮时,类型要写自己重写后的类名,而不是原来的Button类型,这里是MyButton,因为在查找到按钮时,GetComponent<>时,尖括号中的类型就是定义的MyButton,这样才能添加对应的事件。
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";
}
}
使用方法的示例代入如下截图中所示:
版权归原作者 qust_tian 所有, 如有侵权,请联系我们删除。