首页 > 代码库 > UGUI事件系统

UGUI事件系统

UGUI系统 将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。

PointerEnter--

PointerExit--

PointerDown--

PointerUp--

PointerClick--

Drag--

Drop--

Scroll--

UpdateSelected--

Select--

Deselect--

Move--

技术分享

 

方式一:继承基础接口实现

1.创建CllickObject脚本。继承MonoBehaviour和IPointerClickHandle(using UnityEngine.EventSystems;)

2.实现public void OnPointerClick(PointerEventData eventData)方法

3.创建一个名为Panel_IPointer的空对象,且将ClickObject脚本附加到对象上

4.启动,并点击Panel_IPointer对象

 

方式二:U3D编辑器操作设置实现

1:创建一个C#脚本。在脚本中添加一个public方法。

2:创建一个命名为Empty的UI对象,用于接收和响应点击事件。创建一个名为Panel的UI对象,用于触发点击事件。

3:Panel对象添加EventTrigger组件," Add New" -> 选择" PointerClick"。将Empty对象拖拽到触发者位置。然后点击"No Function"选择我们写在Test脚本中的OnTestClick事件。

4:设置好这些之后。我们的事件触发就已经完成了。运行Unity3D。点击窗口中Panel对象。

 

方式三:程序动态设置实现

我们在日常的开发中。可能需要动态的需要变更绑定的事件。那么我们如何才能使用C#代码控制绑定触发事件呢?

下面我们就介绍代码控制。ScriptControl.cs脚本

 1 public class ScriptControl : MonoBehaviour {   2     3     // Use this for initialization   4     void Start ()   5     {   6         var trigger = transform.gameObject.GetComponent();  7         if (trigger == null)   8             trigger = transform.gameObject.AddComponent();  9    10         // 实例化delegates  11         trigger.delegates = new List(); 12    13         // 定义需要绑定的事件类型。并设置回调函数  14         EventTrigger.Entry entry = new EventTrigger.Entry();  15         // 设置 事件类型  16         entry.eventID = EventTriggerType.PointerClick;  17         // 设置回调函数  18         entry.callback = new EventTrigger.TriggerEvent();  19         UnityActioncallback =new UnityAction(OnScriptControll); 20         entry.callback.AddListener(callback);  21         // 添加事件触发记录到GameObject的事件触发组件  22         trigger.delegates.Add(entry);  23     }  24        25     // Update is called once per frame  26     void Update () {  27        28     }  29    30     public void OnScriptControll(BaseEventData arg0)  31     {  32         Debug.Log("Test Click");  33     }  34    35 }  

方式四:点击事件的特殊实现方式:使用Button控件实现

针对Click事件还存在一种特殊方式:uGUI系统中官方提供了一种Button控件。Button封装了官方提供的一套OnClick事件。操作完全类似于方式二。便不详述了。

使用Button我们可以实现动态的变更鼠标绑定的点击事件。如下代码所示:

 1 using UnityEngine;   2 using System.Collections;   3 using UnityEngine.UI;   4     5 public class BtnControl : MonoBehaviour {   6     7     // Use this for initialization   8     void Start ()   9     {  10         var button = transform.gameObject.GetComponent();  11         if (button != null)  12         {  13             button.onClick.RemoveAllListeners();  14             button.onClick.AddListener(TestClick);  15         }  16     }  17    18     public void TestClick()  19     {  20         Debug.Log("Test Click. This is Type 4");  21     }  22        23     // Update is called once per frame  24     void Update () {  25            26     }  27 }  

 

UGUI事件系统