本篇將會學到:
- 直接監聽Button事件
- 透過SendMessage的方式,一次監聽多個
- 使用UIListener,實現更彈性的監聽
1.這篇我們主要來講Button事件的處理,首先是直接監聽Button事件
▌先在Panel上增加一個Button,設定如下
Background:按鈕背景
▌我們新建一個 ButtonEvent.cs 腳本,把它放到 Button 上,程式碼如下
using UnityEngine;
using System.Collections;
public class ButtonEvent : MonoBehaviour
{
//主要是為其增加 OnClick 方法,監聽按鈕事件,如果按下就輸出 Debug 訊息
void OnClick ()
{
Debug.Log ("OnClick");
}
}
▌好了後存檔,我們回到Unity,執行後按下按鈕,左下方會出現 Debug 訊息
2.上面是一個按鈕,如果我們要多個按鈕都有事件,那是不是要一個一個加?? 答案當然不是,有更方便的方式控管,我們將使用SendMessage的方式,發送消息到一個目標上,一次監聽多個發送過來的事件
▌把之前按鈕的腳本移除,然後再建立一個按鈕
▌建立一個空物體,讓他來一次監聽多個按鈕事件
▌修改名稱為 Event Controller ,移動至 Panel 下,並把 Event Controller 的 Transform 位置重置,不然會發生位置偏移
▌把 Button 移動至 Event Controller 下,如完成下圖
▌建立一個 ButtonMsg.cs 腳本,內容如下,分別監聽兩個按鈕的事件
using UnityEngine; using System.Collections; public class ButtonMsg: MonoBehaviour { void OnButtonClick1(){ Debug.Log ("OnButtonClick1"); } void OnButtonClick2(){ Debug.Log ("OnButtonClick2"); } }
▌我們為兩個 Button 增加 Button Message 腳本
▌Button Message設置如下
Target:接收按鈕事件的物件,這邊就是我們剛剛所建立的 Event Controller
Function Name:接收按鈕事件的方法,這個方法必須綁定在 Target 物件身上
Trigger:觸發的事件
Include Children :是否讓Target的所有子物件也發送點擊事件
▌回到Unity 中,透過這個方式會發現可以一次監聽多個 Button 了
3.什麼,還有更靈活的方式,透過UIListener,在任何一個腳本或者類中可以得到按鈕的點擊事件
▌刪除兩個 Button ,並重新建立一個Button 與一個空物件,為空物件增加 Event Listener 腳本
▌建立一個 ButtonListener.cs 腳本,內容如
using UnityEngine; using System.Collections; public class ButtonListener : MonoBehaviour { void Awake () { //獲取需要監聽的按鈕對象 GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/Button"); //設置這個按鈕的監聽,指向本類的ButtonClick方法中。 UIEventListener.Get(button).onClick = ButtonClick; } //計算按鈕的點擊事件 void ButtonClick(GameObject button) { Debug.Log("GameObject " + button.name); } }
▌回到Unity把腳本拖到空物件上,發現可以接受到按鈕事件
▌參考網站
▌所有資源作為教學用,無任何商業用途!!
歡迎轉載,但務必註明出處!!