c# - 如何检查 Animator 是否结束播放特定状态动画?
问题描述
这样,在播放动画状态时它一直在里面:
void Update()
{
if (this.animator.GetCurrentAnimatorStateInfo(0).IsName("Stand Up"))
{
string tt = "";
}
}
所以我尝试添加!检查它是否为假:
void Update()
{
if (!this.animator.GetCurrentAnimatorStateInfo(0).IsName("Stand Up"))
{
string tt = "";
}
}
但这样即使状态动画播放完毕,它也永远不会进入。
我在动画控制器中有一个基础层。
解决方案
注意:下面的解决方案只有在您的动画不循环并且我假设“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 方法中添加所有处理程序代码,如果您只想做一些简单但有点反模式的事情,这很好。
推荐阅读
- reactjs - 如何在本地网络上使用 docker 和 PWA 实现持续部署?
- visual-studio-code - 这是 VSCode 中的错误还是功能
- python - 在 Python 函数中,将 pandas 结果写入 CSV
- java - assertThatThrownBy() 检查自定义异常的字段
- sql-update - Teradata 使用具有不同日期的多个 ID 实例的源表更新目标表
- typescript - TypeORM 和 Vue 类组件
- loadrunner - 调用过程会引发错误 ORA-30625: NULL SELF ORA-06512
- java - 相机打开 2 次并崩溃
- r - 如何根据日历周和年份汇总列中的值计数
- terraform - Terraform 解析 Cloudformation 输出