Unity UGUI按鈕新增點選事件
阿新 • • 發佈:2022-01-25
1. 視覺化建立及事件繫結 #
1 : 通過 Hierarchy 面板建立UI > Button
.
2 : 建立一個指令碼 TestClick.cs, 定義了一個 Click 的 public 方法(一定要是public的方法).
3 : 把指令碼 TestClick.cs 掛到一個遊戲物件或者Button本身上.
4 : 把掛指令碼的遊戲物件拖到圖中Button的畫紅圈的位置.
5 : 點選圖中Button的畫藍圈的位置,選擇TestClick指令碼,選擇Click方法.
執行,點選按鈕.
2. 通過直接繫結指令碼來繫結事件 #
1 : 建一個ButtonClickTest指令碼,掛在一個遊戲物件上(裡面的方法public或private都可以).
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ButtonClickTest : MonoBehaviour { private GameObject buttonObj; private void Start() { buttonObj = GameObject.Find("Button"); buttonObj.GetComponent<Button>().onClick.AddListener(M); buttonObj.GetComponent<Button>().onClick.AddListener(F); } void M() { print("執行了M方法!"); } public void F() { print("執行了N方法!"); } }
2 : 執行,點選按鈕執行兩個方法.
buttonObj.GetComponent<Button>().onClick.AddListener(M);可以換成 buttonObj.GetComponent<Button>().onClick.AddListener ( delegate () { M(); } );
3. 通過 EventTrigger 實現按鈕點選事件(一) #
1 : 建立一個ButtonClickTest 指令碼, 利用 UnityEngine.EventSystems.EventTrigger 新增監聽事件.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; // 有了此指令碼,就會自動新增 EventTrigger 指令碼 [RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))] public class ButtonClickTest : MonoBehaviour { // Use this for initialization void Start() { Button btn = this.GetComponent<Button>(); EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>(); EventTrigger.Entry entry= new EventTrigger.Entry(); EventTrigger.Entry entry= new EventTrigger.Entry(); EventTrigger.Entry entry= new EventTrigger.Entry(); // 滑鼠點選事件 entry1.eventID = EventTriggerType.PointerClick; // 滑鼠進入事件 entry2.eventID = EventTriggerType.PointerEnter; // 滑鼠滑出事件 entry3.eventID = EventTriggerType.PointerExit; entry1.callback = new EventTrigger.TriggerEvent(); entry1.callback.AddListener(M); trigger.triggers.Add(entry1); entry2.callback = new EventTrigger.TriggerEvent(); entry2.callback.AddListener(N); trigger.triggers.Add(entry2); entry3.callback = new EventTrigger.TriggerEvent(); entry3.callback.AddListener(F); trigger.triggers.Add(entry3); } private void M(BaseEventData pointData) { Debug.Log("滑鼠點選了!"); } private void N(BaseEventData pointData) { Debug.Log("滑鼠進入了!"); } private void F(BaseEventData pointData) { Debug.Log("滑鼠滑出了!"); } }
2 :把指令碼掛在Button物件上,然後Unity會給Button遊戲物件再掛一個EventTrigger指令碼.
3 :執行.
4. 通過 EventTrigger 實現按鈕點選事件(二) #
1 :寫一個指令碼掛在一個遊戲物件,例如相機上(和按鈕關聯的事件方法要宣告為public).
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ButtonClickTest : MonoBehaviour { // Use this for initialization void Start() { } public void M() { Debug.Log("滑鼠點選了!"); } public void N() { Debug.Log("滑鼠進入了!"); } public void F() { Debug.Log("滑鼠滑出了!"); } public void K() { Debug.Log("滑鼠按下了!"); } public void L() { Debug.Log("滑鼠抬起了!"); } }
2 :給Button遊戲物件新增EventTrigger元件.
3 :在元件裡新增對應的事件,選擇對應的方法.
4 :執行,滑鼠在按鈕上運動,點選.