Unity3D中uGUI事件系統簡述及使用方法總結


    

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM