1. 程式人生 > >在Unity中使用事件/委託機制(event/delegate)進行GameObject之間的通訊

在Unity中使用事件/委託機制(event/delegate)進行GameObject之間的通訊



C#中標準的委託型別
我們在構建事件/委託機制的時候,首先要定義委託型別,參考在Cocos2d-x中的CCCallback,我先定義了以下三種類型的委託:
// 該委託不傳任何引數
public delegate void CallFunc();
// 該委託會傳入發生事件的GameObject,即sender
public delegate void CallFuncO(GameObject sender);
// 該委託會傳入發生事件的GameObject,即sender。和一個變長引數列表
public delegate void CallFuncOP(GameObject sender, EventArgs args);
但是我發現C#本身已經提供了一種比較好的委託型別:EventHandler,所以我就把遊戲中的委託都替換成了這種委託。
public delegate void EventHandler(object sender, EventArgs e);
另一種更好的委託方式是使用泛型引數的委託型別:EventHandlerTEventArgs,其簽名如下:
public delegate void EventHandlerTEventArgs(
Object sender,
TEventArgs e
)