gpt4 book ai didi

c# - 如何在具有动画器的游戏对象之外添加动画事件接收器/监听器?

转载 作者:行者123 更新时间:2023-12-02 18:33:03 29 4
gpt4 key购买 nike

我有一个带有动画器的游戏对象和一些可以触发事件的动画(具有特定的回调函数)。

enter image description here

只要我将脚本添加到与动画器相同的游戏对象(包括接收器),一切都会正常工作:

enter image description here

public class AnimatorEventReceiver : MonoBehaviour {

void OnAnimationEnd( AnimationEvent animationEvent ) {
// do something
}

}

(这是一个简化的示例,我删除了所有不必要的内容)

我的问题是:我必须在包含动画器的游戏对象之外监听此事件。我拥有对 GameObject 本身的完全访问权限,如何在外部添加“EventListener”来监听此 AnimationEvent?

我正在寻找与 Javascript“object.addEventListener(callback)”等效的 Unity/C#

应该接收动画事件的对象是包含动画器的游戏对象的父对象 - 如果有帮助的话。

最佳答案

您不能直接转发,但您可以通过正常事件转发,例如

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)
{
// Do something
}

或者您也可以使用 Unity 的内置 UnityEvent,这样您就可以在 Inspector 中设置回调(类似于 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)
{
// Do something
}

关于c# - 如何在具有动画器的游戏对象之外添加动画事件接收器/监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69154223/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com