UGUI系統 將UI可能觸發的事件分為12個類型,即EventTriggerType枚舉的12個值。
PointerEnter--
PointerExit--
PointerDown--
PointerUp--
PointerClick--
Drag--
Drop--
Scroll--
UpdateSelected--
Select--
Deselect--
Move--
方式一:繼承基礎接口實現
1.創建CllickObject腳本。繼承MonoBehaviour和IPointerClickHandle(using UnityEngine.EventSystems;)
2.實現public void OnPointerClick(PointerEventData eventData)方法
3.創建一個名為Panel_IPointer的空對象,且將ClickObject腳本附加到對象上
4.啟動,並點擊Panel_IPointer對象
方式二:U3D編輯器操作設置實現
1:創建一個C#腳本。在腳本中添加一個public方法。
2:創建一個命名為Empty的UI對象,用於接收和響應點擊事件。創建一個名為Panel的UI對象,用於觸發點擊事件。
3:Panel對象添加EventTrigger組件," Add New" -> 選擇" PointerClick"。將Empty對象拖拽到觸發者位置。然后點擊"No Function"選擇我們寫在Test腳本中的OnTestClick事件。
4:設置好這些之后。我們的事件觸發就已經完成了。運行Unity3D。點擊窗口中Panel對象。
方式三:程序動態設置實現
我們在日常的開發中。可能需要動態的需要變更綁定的事件。那么我們如何才能使用C#代碼控制綁定觸發事件呢?
下面我們就介紹代碼控制。ScriptControl.cs腳本
1 public class ScriptControl : MonoBehaviour { 2 3 // Use this for initialization 4 void Start () 5 { 6 var trigger = transform.gameObject.GetComponent(); 7 if (trigger == null) 8 trigger = transform.gameObject.AddComponent(); 9 10 // 實例化delegates 11 trigger.delegates = new List(); 12 13 // 定義需要綁定的事件類型。並設置回調函數 14 EventTrigger.Entry entry = new EventTrigger.Entry(); 15 // 設置 事件類型 16 entry.eventID = EventTriggerType.PointerClick; 17 // 設置回調函數 18 entry.callback = new EventTrigger.TriggerEvent(); 19 UnityActioncallback =new UnityAction(OnScriptControll); 20 entry.callback.AddListener(callback); 21 // 添加事件觸發記錄到GameObject的事件觸發組件 22 trigger.delegates.Add(entry); 23 } 24 25 // Update is called once per frame 26 void Update () { 27 28 } 29 30 public void OnScriptControll(BaseEventData arg0) 31 { 32 Debug.Log("Test Click"); 33 } 34 35 }
方式四:點擊事件的特殊實現方式:使用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.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 }
注意:
1.給按鈕增加事件:
button.onClick.RemoveAllListeners(); //移除所有注冊事件
button.onClick.AddListener(TestClick);//注冊一個按鈕點擊 回調
button.onClick.AddListener(TestClick2);//新加一個按鈕點擊 回調(兩個都會走,上面的先走)