c# - Unity播放动画后如何启动代码?

标签 c# visual-studio unity-game-engine

我需要像弹出动画一样播放(越来越小),然后将 UI 元素从动画移出 Canvas 。

我尝试过各种方法,例如

bool AnimatorIsPlaying(){
     return animator.GetCurrentAnimatorStateInfo(0).length >
            animator.GetCurrentAnimatorStateInfo(0).normalizedTime;
  }

 bool AnimatorIsPlaying(){
      return animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1;
   }

还有更多,几乎都来自这个https://answers.unity.com/questions/362629/how-can-i-check-if-an-animation-is-being-played-or.html问题。

有时,如果在带有 bool 值的 if 子句中,这些东西根本没有移出,或者移出得太快,就像什么都没有添加一样。我什至尝试将该方法设为 IEnumerator,以便我可以执行 yield return new WaitForSecondsRealtime(0.25f) 但随后我无法再从其他类调用该方法(这是必要的) .

现在我找到了一个方法,它只是从另一个类调用一个方法,然后启动一个协程,yield return new WaitForSecondsRealtime(0.25f)。但是有没有更好的方法以及为什么它不起作用?

最佳答案

几周前遇到了类似的问题......这就是我解决它的方法:

我将我的动画 Controller 设置为在完成当前动画后立即开始下一个动画。 (如果您之后没有动画,只需使用一个空动画作为空闲状态)然后在启动动画后,在我的代码中,我使用协程等待“空闲动画”开始(因此您的原始动画已结束)它对我来说非常有效,所以也许它也对你有用!

这是协程的代码:

public IEnumerator WaitForAnimationFinished()
{
    yield return new WaitUntil( delegate { return playerAnimator.GetCurrentAnimatorStateInfo(0).IsName("YourIdleAnimationName"); });
    
    // Move the UI-Elements from the animation out of the canvas
} 

我想这不是最好的解决方案,但为了使其能够从另一个类调用它,您可以在保存上述方法的脚本中添加一个 public static MyScriptInstance 变量。然后你可以调用你的方法

StartCoroutine(MyScript.MyScriptInstance.WaitForAnimationFinished())

希望我能帮到你! :)

关于c# - Unity播放动画后如何启动代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72848948/

相关文章:

c# - 在 ServiceStack 中使用 ICacheClient 和 protobuf 时的编码/序列化问题

asp.net - 在 OnClientClick 代码中包含 eval/bind 值

unity-game-engine - 游戏运行时屏幕中间的软盘图标

javascript - 使用带有 sql server 字段的 c#、javascript 和 HTML 在 <select> 元素中添加项目

c# - Windows Phone 8.1不发送UDP广播

php - 在 VS 2010 中启用 PHP 亮点?

asp.net-mvc - ASP.NET MVC 从新 View 模型下拉菜单中排除命名空间

unity-game-engine - ParseFacebookUtils.LogInAsync 仅在 WebPlayer 上给出错误

c# - Unity如何区分Android和iOS

c# - 尝试在 anchor 标记帮助程序中使用自定义路由时出现错误