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

    

    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

 

    方式二:Unity3D編輯器操做設置實現

    

步驟一:建立一個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 }

    點擊事件的特殊實現方式:使用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. 歡迎廣大讀者圍觀

相關文章
相關標籤/搜索