首先,我們要先用 C# 宣告好兩個事件,直接拿 上一篇文章的專案 來示範。
將 NoArgsEventExample 與 ArgsEventExample 兩個腳本都掛到 GameManager 上,第一個是無參數的事件,第二個是帶有一個整數參數的事件。
無參數事件
有兩種使用方式,第一種直接呼叫物件內建的方法或修改屬性,我們用控制物件開關 gameObject.SetActive
,另一種是呼叫自己寫的方法。
控制物件開關
先點擊 No Args Event Example 組件 (Component) 右下角的 +,並點擊下圖編號 2 的圓圈來選擇遊戲物件 (自行建立一個空物件)。
再點擊 No Function > GameObject > SetActive (bool),選擇遊戲物件預設的設定開關方法。
最後勾選或取消下圖紅框處的勾選框,設定觸發事件時要改變的狀態。如下圖的沒勾選的設定是,在事件觸發後,會將物件給關掉,把它隱藏起來。
呼叫自訂方法
新增一個 CustomMethodExample 腳本,建立一個公開 (Public) 的 Foo 方法,並帶有一個字串參數,呼叫時會將字串印出來。
1using UnityEngine;
2
3public class CustomMethodExample : MonoBehaviour
4{
5 public void Foo(string text)
6 {
7 Debug.Log(text);
8 }
9}
將 CustomMethodExample 掛到一個空物件上面。
操作方法與前面的呼叫預設方法相同,只不過這次選的是自己建立的 CustomMethodExample > Foo (string)。
最後可以在輸入框中輸入文字,當事件觸發時將會透過 Foo 方法來把文字印出來。
有參數事件
有參數的事件意思是當事件觸發時,它會帶有參數,你可以讀取那個參數來辨識是誰觸發的事件或其它資訊。
舉例來說,ArgsEventExample 的 OnKeyTrigger 事件會在按下方向鍵時被觸發,並帶有 1234 的整數參數,讓接收端知道現在是按下了哪個按鍵。
首先,在 CustomMethodExample 中新增一個 PrintKeyID 方法,並帶有一個整數參數。
1public void PrintKeyID(int id)
2{
3 Debug.Log(id);
4}
接下來,操作和前面的相同,但選擇的是 CustomMethodExample > PrintKeyID。
這邊要注意,我們要選的是上面 Dynmatic int 區塊的 PrintKeyID,不是 Static Parameters 的。
正確的設定會長這樣,選擇 PrintKeyID 後,下面沒有任何勾選框或輸入框。
執行遊戲,當按下方向鍵後,遊戲就會因為事件被觸發的關係,印出方向鍵的數字 ID。下圖紅框處就是我們寫的 PrintKeyID 方法。
範例專案
本文所示範的內容皆已上傳至 GitHub (inspector 分支):tedliou/unity-event-tutorial