Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。以下图所示:编辑器
先以PointerClick为例。这个是用于某点点击事件。其余事件均可以根据相同的办法调用。函数
之因此使用PointerClick为例。是由于在最后笔者会提到一个特殊的实现方式。而相比于其余事件类型,有且仅有Click事件存在特殊实现。学习
咱们要实现事件主要有3种方式:this
步骤一:建立ClickObject脚本。继承MonoBehaviour和IPointerClickHandler。spa
步骤二:实现public void OnPointerClick(PointerEventData eventData)方法:3d
步骤三:建立一个名为Panel_IPointer的空对象。而且将ClickObject脚本附加到对象上。code
步骤四:启动,并点击Panel_IPointer对象。在Console输出以下:orm
步骤一:建立一个C#脚本。在脚本中添加一个public方法。对象
步骤二:建立一个命名为Empty的UI对象,用于接收和响应点击事件。建立一个名为Panel的UI对象,用于触发点击事件。blog
步骤三:Panel对象添加EventTrigger组件," Add New" -> 选择" PointerClick"。将Empty对象拖拽到触发者位置。而后点击"No Function"选择咱们写在Test脚本中的OnTestClick事件。
步骤四:设置好这些以后。咱们的事件触发就已经完成了。运行Unity3D。点击窗口中Panel对象。Console输出内容以下:
咱们在平常的开发中。可能须要动态的须要变动绑定的事件。那么咱们如何才能使用C#代码控制绑定触发事件呢?
下面咱们就介绍代码控制。ScriptControl.cs脚本
1 using System.Collections.Generic; 2 using UnityEngine; 3 using UnityEngine.Events; 4 using UnityEngine.EventSystems; 5 6 public class ScriptControl : MonoBehaviour { 7 8 // Use this for initialization 9 void Start () 10 { 11 var trigger = transform.gameObject.GetComponent<EventTrigger>(); 12 if (trigger == null) 13 trigger = transform.gameObject.AddComponent<EventTrigger>(); 14 15 // 实例化delegates 16 trigger.delegates = new List<EventTrigger.Entry>(); 17 18 // 定义须要绑定的事件类型。并设置回调函数 19 EventTrigger.Entry entry = new EventTrigger.Entry(); 20 // 设置 事件类型 21 entry.eventID = EventTriggerType.PointerClick; 22 // 设置回调函数 23 entry.callback = new EventTrigger.TriggerEvent(); 24 UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll); 25 entry.callback.AddListener(callback); 26 // 添加事件触发记录到GameObject的事件触发组件 27 trigger.delegates.Add(entry); 28 } 29 30 // Update is called once per frame 31 void Update () { 32 33 } 34 35 public void OnScriptControll(BaseEventData arg0) 36 { 37 Debug.Log("Test Click"); 38 } 39 40 }
针对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<Button>(); 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 }
相关源码下载: http://pan.baidu.com/s/1c0pfNJM
做者:TinyZ
出处:http://www.cnblogs.com/zou90512/
关于做者:努力学习,每天向上。不断探索学习,提高自身价值。记录经验分享。
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文连接
若有问题,能够经过 zou90512@126.com 联系我,很是感谢。
笔者网店: shop70768633.taobao.com. 欢迎广大读者围观