我有一個帶有Animator的GameObject和一些可以觸發事件的影片(有特定的回呼函式)。
public class AnimatorEventReceiver : MonoBehaviour {
void OnAnimationEnd( AnimationEvent animationEvent ){
//做一些事情。
}
(這是一個簡化的例子,我剝離了任何不需要的東西)
我的問題是:我必須在包含影片師的GameObject之外監聽這個事件。我可以完全訪問 GameObject 本身,我如何在外部添加一個 "EventListener "來監聽這個 AnimationEvent 呢?
我正在尋找相當于Javascript的 "object.addEventListener( callback ) "的Unity/C#
。應該接收AnimationEvent的物件是包含Animator的GameObject的父物件--如果這有幫助的話。
uj5u.com熱心網友回復:
你不能直接這樣做,但你可以通過一個普通的事件來轉發它,例如:
你不能直接這樣做。
public class AnimatorEventReceiver : MonoBehaviour >。
{
public event Action< AnimationEvent> OnAnimationEnded;
void OnAnimationEnd(AnimationEvent animationEvent)
{
AnimationEnded?.Invoke(animationEvent)。
}
}
然后任何其他 "知道 "你的物件的物件都可以做,例如:
public AnimatorEventReceiver eventReceiver;
private void Awake()
{
eventReceiver.OnAnimationEnded = HandleAnimationEnded。
private void OnDestroy())
{
eventReceiver.OnAnimationEnded = HandleAnimationEnded。
private void HandleAnimationEnded(AnimationEvent animationEvent)
{
//做一些事情。
}
或者,你也可以使用Unity內置的UnityEvent,這樣你就可以在檢查器中設定回呼(類似于例如Button onClick)
// I know ... please come up with a better name :D.
[Serializable] 。
public class AnimationEventEvent : UnityEvent<AnimationEvent> { }
public class AnimatorEventReceiver : MonoBehaviour >。
{
public AnimationEventEvent OnAnimationEnded;
void OnAnimationEnd(AnimationEvent animationEvent)
{
AnimationEnded.Invoke(animationEvent)。
}
}
然后你可以在檢查器或任何其他 "知道 "你的物件可以做的物件中添加回呼,例如:
。
public AnimatorEventReceiver eventReceiver;
private void Awake()
{
eventReceiver.OnAnimationEnded.AddListener( HandleAnimationEnded)。
}
private void OnDestroy()。
{
eventReceiver.OnAnimationEnded.RemoveListener( HandleAnimationEnded)。
}
private void HandleAnimationEnded(AnimationEvent animationEvent)。
{
//做一些事情。
}
或者,你也可以使用Unity內置的UnityEvent,這樣你就可以在檢查器中設定回呼(類似于例如Button onClick)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/312675.html
標籤:


