Unity Button绑定事件的方法
一、可视化创建及事件绑定
先写一段 Button 的响应代码:
1 using UnityEngine; 2 using UnityEngine.UI; 3 4 public class ButtonTest : MonoBehaviour 5 { 6 public Text m_Text; 7 8 public void OnButtonClickEvent() 9 { 10 m_Text.text = "按钮点击"; 11 } 12 }
点击 Button 组件上的 OnClick 的+号,将绑定脚本的对象赋值到这个 Button 组件上
选择并绑定 Button 的点击事件
Button 的点击效果:
二、通过监听按钮绑定事件
使用 Button 组件自带的 onClick.AddListener 方法:
1 using UnityEngine; 2 using UnityEngine.UI; 3 4 public class ButtonTest : MonoBehaviour 5 { 6 public Button m_Button; 7 public Text m_Text; 8 9 void Start() 10 { 11 m_Button.onClick.AddListener(OnButtonClickEvent); 12 } 13 14 public void OnButtonClickEvent() 15 { 16 m_Text.text = "按钮点击"; 17 } 18 }
Button 的点击效果:
三、通过射线监听点击的物体来绑定事件
1 using System.Collections.Generic; 2 using UnityEngine; 3 using UnityEngine.EventSystems; 4 using UnityEngine.UI; 5 6 public class ButtonTest : MonoBehaviour 7 { 8 public Text m_Text; 9 10 void Update() 11 { 12 if (Input.GetMouseButtonDown(0)) 13 { 14 if (OnePointColliderObject() != null) 15 { 16 if (OnePointColliderObject().name == "Button" || OnePointColliderObject().name == "Text") 17 { 18 ButtonOnClickEvent(); 19 } 20 } 21 } 22 } 23 24 // 点击对象获取到对象的名字 25 public GameObject OnePointColliderObject() 26 { 27 // 存有鼠标或者触摸数据的对象 28 PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current); 29 // 当前指针位置 30 eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y); 31 // 射线命中之后的反馈数据 32 List<RaycastResult> results = new List<RaycastResult>(); 33 // 投射一条光线并返回所有碰撞 34 EventSystem.current.RaycastAll(eventDataCurrentPosition, results); 35 // 返回点击到的物体 36 if (results.Count > 0) 37 return results[0].gameObject; 38 else 39 return null; 40 } 41 42 public void ButtonOnClickEvent() 43 { 44 m_Text.text = "按钮点击"; 45 } 46 }
Button 的点击效果:
四、通过EventTrigger实现点击事件
在 Button 上添加 EventTrigger 组件
编辑代码:
1 using UnityEngine; 2 using UnityEngine.EventSystems; 3 using UnityEngine.UI; 4 5 [RequireComponent(typeof(EventTrigger))] 6 public class ButtonTest : MonoBehaviour 7 { 8 public Text m_Text; 9 10 void Start() 11 { 12 Button btn = transform.GetComponent<Button>(); 13 EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>(); 14 EventTrigger.Entry entry = new EventTrigger.Entry 15 { 16 // 鼠标点击事件 17 eventID = EventTriggerType.PointerClick, 18 19 callback = new EventTrigger.TriggerEvent() 20 }; 21 entry.callback.AddListener(ButtonOnClickEvent); 22 trigger.triggers.Add(entry); 23 } 24 25 public void ButtonOnClickEvent(BaseEventData pointData) 26 { 27 m_Text.text = "按钮点击"; 28 } 29 }
Button 的点击效果:
五、通过通用类UIEventListener处理响应事件
通用类 UIEventListener 脚本:
1 using UnityEngine; 2 using UnityEngine.EventSystems; 3 4 public class UIEventListener : MonoBehaviour, IPointerClickHandler 5 { 6 // 定义事件代理 7 public delegate void UIEventProxy(); 8 // 鼠标点击事件 9 public event UIEventProxy OnClick; 10 11 public void OnPointerClick(PointerEventData eventData) 12 { 13 if (OnClick != null) 14 OnClick(); 15 } 16 }
Button 脚本:
1 using UnityEngine; 2 using UnityEngine.EventSystems; 3 using UnityEngine.UI; 4 5 [RequireComponent(typeof(EventTrigger))] 6 public class ButtonTest : MonoBehaviour 7 { 8 public Text m_Text; 9 10 void Start() 11 { 12 Button btn = this.GetComponent<Button>(); 13 UIEventListener btnListener = btn.gameObject.AddComponent<UIEventListener>(); 14 15 btnListener.OnClick += delegate () { 16 ButtonOnClickEvent(); 17 }; 18 } 19 20 public void ButtonOnClickEvent() 21 { 22 m_Text.text = "按钮点击"; 23 } 24 }
Button 的点击效果:
*** | 以上内容仅为学习参考、学习笔记使用 | ***