Unity-UnityEvent
借助 UnityEvent 可讓用戶驅(qū)動的回調(diào)從編輯時間一直持續(xù)到運行時,無需進行額外的編程和腳本配置。
UnityEvent 對許多方面都很有用:
內(nèi)容驅(qū)動的回調(diào)
解耦系統(tǒng)
持久回調(diào)
預(yù)配置的調(diào)用事件
UnityEvent
?可添加到任何?MonoBehaviour
,并從標準 .net 委托之類的代碼中執(zhí)行。當?UnityEvent
?添加到?MonoBehaviour
?時,它會出現(xiàn)在 Inspector 中,并可添加持久回調(diào)。
UnityEvent
?與標準委托有類似的限制。也就是說,它們會保留對目標元素的引用,而這會阻止對目標進行垃圾收集。如果將 UnityEngine.Object 作為目標,而本機表示消失,則不會調(diào)用回調(diào)。
使用 UnityEvent
要在 Editor 中配置回調(diào),需執(zhí)行以下幾個步驟:
0.確保腳本導入/使用?UnityEngine.Events
。
1.選擇 + 圖標為回調(diào)添加字段
2.選擇要接收回調(diào)的 UnityEngine.Object(可使用對象選擇器進行選擇)
3.選擇要調(diào)用的函數(shù)
4.可為事件添加多個回調(diào)
在 Inspector 中配置?UnityEvent
?時,支持兩種類型的函數(shù)調(diào)用:
靜態(tài)。靜態(tài)調(diào)用是預(yù)配置的調(diào)用,具有在 UI 中設(shè)置的預(yù)配置值。這意味著,在調(diào)用回調(diào)時,使用已在 UI 中輸入的參數(shù)調(diào)用目標函數(shù)。
動態(tài)。使用從代碼發(fā)送的參數(shù)調(diào)用動態(tài)調(diào)用,并與正在調(diào)用的 UnityEvent 類型相關(guān)。UI 會過濾回調(diào),僅顯示對 UnityEvent 有效的動態(tài)調(diào)用。
通用 UnityEvent
默認情況下,Monobehaviour
?中的?UnityEvent
?動態(tài)綁定到 void 函數(shù)。但不一定非得如此,因為 UnityEvent 的動態(tài)調(diào)用支持綁定到最多包含 4 個參數(shù)的函數(shù)。為此,您需要定義一個支持多個參數(shù)的自定義?UnityEvent
?類。此定義十分簡單:
[Serializable]
public class StringEvent : UnityEvent ?{}
通過將此類的實例添加到您的類而不是基本?UnityEvent
,即可使回調(diào)動態(tài)綁定到字符串函數(shù)。
然后,可通過調(diào)用以?string
?為參數(shù)的?Invoke()
?函數(shù)來對其進行調(diào)用。
UnityEvent 可在其通用定義中定義最多 4 個參數(shù)。