1. 程式人生 > 其它 >Unity UGUI按鈕新增點選事件

Unity UGUI按鈕新增點選事件

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 :執行,滑鼠在按鈕上運動,點選.