注意:只有在您的动画不循环并且我假设“StandUp”不循环时,以下解决方案才真正相关。否则,每次动画循环时都会引发该事件。
在我看来,你最好发起一个动画事件。
您可以通过将事件标记添加到动画时间轴来从相关的特定动画中引发事件。
然后,当您单击时间线顶部的事件标记时,您将在检查器中看到一些选项。
然后,您需要为要处理此事件的事件处理程序提供一个名称,例如 MyEventRaised 并将脚本附加到具有您的动画组件的对象。
在该脚本中,您可以为事件添加所需的处理程序。
using System;
public class MySpriteEventHandlerScript:MonoBehaviour
{
public EventHandler MyEventHandler;
public void MyEventRaised()
{
MyEventHandler?.Invoke(this, EventArgs.Empty);
}
}
然后,在您想要响应您创建的事件的任何脚本中,您可以获取对附加到动画对象的事件处理程序脚本的引用,并使用 MyEventHandler 事件处理程序注册一些代码。
private MySpriteEventHandlerScript _MyEventHandlerScript;
void Start()
{
_MyEventHandlerScript = GameObject.FindGameObjectWithTag("MySprite").GetComponent<MySpriteEventHandlerScript>();
// Register some code to do something when the handler is invoked
_MyEventHandlerScript.MyEventHandler += TheCodeToRun;
}
// Create the necessary method in your class
private void TheCodeToRun()
{
Debug.Log("The animation event has happened!");
}
或者,您可以在 MyEventRaised 方法中添加所有处理程序代码,如果您只想做一些简单但有点反模式的事情,这很好。