【U3D】關於 UGUI按鈕:Button 以及事件:EventTrigger 的一些經驗教訓

一、如何使用Button調用事件

1.在Button附件裏的OnClick()欄點擊"+"號,然後將要調用的事件方法所在腳本拖進去,選擇對應方法,其中:

(1)方法要public出去;
(2)方法似乎最多隻能帶一個參,暫時沒找到解決方法;
(3)IEnumerator協程接口不可直接調用(但是可以把StartCoroutine放在調用的方法裏)。

2. 腳本控制監聽Click事件

 //記得引用UI
 using UnityEngine.UI;
 public Button button;
 //將目標Button拖到GameObject上
    void Start()
    {
          //如果是預製體身上的Button,就用GameObject.Find吧
         button.onClick.AddListener(delegate
            {
                Debug.Log("我被點了一下");
            });
   
    }

注意:
 1.這個 AddListener 每次調用都會添加一個監聽,不能放在UpDate裏;
 2.如果腳本是 DontDestroyOnLoad 的,記得在 AddListener 之前加上 button.onClick.RemoveAllListeners();
 3.如果不想清空按鈕所有事件(雖然很少這麼做),你可以用 button.onClick.RemoveListener(btnAction);來移除指定事件;其中 btnAction是 UnityAction 型的,下面是示例代碼:

 //記得引用Events
 using UnityEngine.Events;
 //委託UnityAction
 UnityAction btnAction1btnAction2;
    void Awake()
    {
        //委託事件1
        btnAction1 = delegate
        {
            ClickOne();
        };
        //委託事件2
        btnAction2 = delegate
        {
            ClickTwo();
        };
        //添加監聽
        AddBtnListener();
    }
    void AddBtnListener()
    {
        btn.onClick.AddListener(btnAction1);
        btn.onClick.AddListener(btnAction2);
    }
    void ClickOne()
    {
        Debug.Log("1");
    }
    void ClickTwo()
    {
        Debug.Log("2");
        //按下Button後去除第一個監聽,之後就只會打印"2"
        btn.onClick.RemoveListener(btnAction1);
    }

3.使用EventTrigger中的AddNewEventType添加事件,監聽分解動作,其中

 除了1中需要注意的事項,還需注意:
(1)各種Event觸發的機理與時機:
         ①PointerEnter:指針(鼠標、手指等)進入目標(Button、Panel等)範圍的瞬間;
         ②PointerExit:指針離開目標範圍的瞬間;
         ③PointerDown:指針在目標範圍內時:按下的瞬間;
         ④PointerUp:指針在目標範圍內時:指針擡起的瞬間:即使指針擡起的瞬間不在目標範圍內,也會觸發
         ⑤PointerClick:指針對目標完成一次點擊的瞬間:如果指針擡起的瞬間不在目標範圍內,便不會觸發;PointerUp之後執行
         ⑥Drag:指針按住並移動時:如果按下不移動則不觸發;即使拖動時指針不在目標範圍內也會觸發
         ⑦Drop:(理解爲有其他東西被扔到監聽對象身上時觸發)在指針擡起的瞬間:如果被拖拽目標A此時在另一目標B的範圍內,並且目標B有對Drop的監聽(目標A不需要,但需要能夠Drag),則觸發否則不會觸發;PointerUp之後執行
    Scroll指針在目標範圍內時:無論指針是否按下,滾動滾輪時觸發
    UpdateSelected指針完成一次PointerClick後,每一幀都會執行一次對應事件(下文的Select只在最開始執行一次)
   Select指針在目標範圍內完成第一次點擊後,目標變爲"Select"狀態;
   Deselect指針在目標範圍外完成第一次點擊後,目標變爲"Deselect"狀態;
    ⑫Move:任意目標處於"Select"狀態下時:通過『上』『下』『左』『右』鍵,或"W", "S", "A", "D" 等鍵改變了Axis軸的Value時觸發(可用Input.GetAxis("AxisName")檢測);
        InitializePotentialDrag指針在目標範圍內按下時:初始化潛在的可拖動目標,在PointerDown之後,BeginDrag之前觸發;
    BeginDrag指針在目標範圍內按下時:一旦移動便觸發;即使拖動時指針不在目標範圍內也會觸發
    EndDrag:指針在移動時擡起的瞬間:即使指針不在目標範圍內也會觸發;如果觸發了Drop則在其之後觸發
    ⑯Submit:目標處於"Select"狀態下時點擊"Submit"鍵(默認爲"Enter"鍵)時觸發;
         Cancel:目標處於"Select"狀態下時點擊"Cancel"鍵(默認爲"ESC"鍵)時觸發;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章