close

本篇將會學到:

  • 直接監聽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把腳本拖到空物件上,發現可以接受到按鈕事件

    

 

▌參考網站

 

 

所有資源作為教學用,無任何商業用途!!

 

   歡迎轉載,但務必註明出處!!

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 arkai 的頭像
    arkai

    Game & Web Design

    arkai 發表在 痞客邦 留言(0) 人氣()