首页 > 代码库 > 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事件系统