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. 歡迎廣大讀者圍觀