Unity3D的uGUI系統的將UI可能觸發的事件分為12個類型,即EventTriggerType枚舉的12個值。如下圖所示:
先以PointerClick為例。這個是用於某點點擊事件。其他事件都可以根據相同的辦法調用。
之所以使用PointerClick為例。是因為在最后筆者會提到一個特殊的實現方式。而相比於其他事件類型,有且僅有Click事件存在特殊實現。
我們要實現事件主要有3種方式:
方式一:繼承基礎接口實現
步驟一:創建ClickObject腳本。繼承MonoBehaviour和IPointerClickHandler。
步驟二:實現public void OnPointerClick(PointerEventData eventData)方法:
步驟三:創建一個名為Panel_IPointer的空對象。並且將ClickObject腳本附加到對象上。
步驟四:啟動,並點擊Panel_IPointer對象。在Console輸出如下:
方式二:Unity3D編輯器操作設置實現
步驟一:創建一個C#腳本。在腳本中添加一個public方法。
步驟二:創建一個命名為Empty的UI對象,用於接收和響應點擊事件。創建一個名為Panel的UI對象,用於觸發點擊事件。
步驟三: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 }
點擊事件的特殊實現方式:使用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<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. 歡迎廣大讀者圍觀