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 的点击效果:

*** |  以上内容仅为学习参考、学习笔记使用  | ***

原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13328042.html