UGUI_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腳本
1using System.Collections.Generic; 2using UnityEngine; 3using UnityEngine.Events; 4using UnityEngine.EventSystems; 5 6publicclass ScriptControl : MonoBehaviour { 7 8// Use this for initialization 9void Start () 10 { 11var trigger = transform.gameObject.GetComponent<EventTrigger>(); 12if (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 31void Update () { 32 33 } 34 35publicvoid OnScriptControll(BaseEventData arg0) 36 { 37 Debug.Log("Test Click"); 38 } 39 40 }
????點擊事件的特殊實現方式:使用Button控件實現
????
????針對Click事件還存在一種特殊方式:uGUI系統中官方提供了一種Button控件。Button封裝了官方提供的一套OnClick事件。操作完全類似于方式二。便不詳述了。
???? ?
????使用Button我們可以實現動態的變更鼠標綁定的點擊事件。如下代碼所示:
1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4 5publicclass BtnControl : MonoBehaviour { 6 7// Use this for initialization 8void Start () 9 { 10var button = transform.gameObject.GetComponent<Button>(); 11if (button != null) 12 { 13 button.onClick.RemoveAllListeners(); 14 button.onClick.AddListener(TestClick); 15 } 16 } 17 18publicvoid TestClick() 19 { 20 Debug.Log("Test Click. This is Type 4"); 21 } 22 23// Update is called once per frame 24void Update () { 25 26 } 27 }
?
?
?
總結
以上是生活随笔為你收集整理的UGUI_UGUI事件系统简述及使用方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UGUI_UI子节点在Canvas的2D
- 下一篇: Unity3D粒子系统碰撞器抑制、反弹