我的动画没有在应该播放的时候播放

Posted

技术标签:

【中文标题】我的动画没有在应该播放的时候播放【英文标题】:My animations aren't playing when they should be 【发布时间】:2022-01-20 19:29:48 【问题描述】:

所以基本上,我正在使用 c# 统一创建一个流浪的 ai 角色,并且流浪一切正常,但是当某些动画应该播放时,它们却没有。我将包括我用来实现这一点的代码。我还在模型上使用了动画组件,并且动画都正确命名并与动画师名称中的动画对齐,并且动画来自 mixamo。非常感谢任何帮助,因为我完全陷入困境!

   void Update()
    
    if (isWandering == false)
    
    StartCoroutine(Wander());
    
    if (isRotatingRight == true)
    
        gameObject.GetComponent<Animator>().Play("idle");
        transform.Rotate(transform.up * Time.deltaTime * rotSpeed);
    
    if (isRotatingLeft == true)
    
        gameObject.GetComponent<Animator>().Play("idle");
        transform.Rotate(transform.up * Time.deltaTime * -rotSpeed);
    
    if (isWalking == true)
    
        gameObject.GetComponent<Animator>().Play("waalk");
        transform.position += transform.forward * moveSpeed * Time.deltaTime;
    

【问题讨论】:

用else if代替ifs不是更好吗?此外,除了这 4 种情况之外,可能还有其他情况可能会影响动画。 看起来动画可以在每一帧开始 【参考方案1】:

真的可以考虑使用Animator参数和转场,以后会省很多麻烦。


无论如何,关于这个问题:您的代码在Update,这意味着它运行每一帧。

这意味着您告诉 Animator 播放具有该名称的状态的每一帧,因此每一帧它都会重新启动该状态的动画。结果将是您的对象将卡在任何动画的第一帧上。

当所需条件发生变化时,您应该只调用一次Play


顺便说一下,这是使用 Animator 参数更方便的一个示例,因为通过转换,您正在查询将 animator 从一种状态转移到另一种状态的特定条件,因此您会得到这个“只运行一次”免费的行为。

【讨论】:

感谢您的回复!这个脚本来自一个教程,cmets 中的每个人似乎都说它运行良好,视频也运行良好,但这可能只是一些误导。非常感谢,我会尝试使用参数并让您知道! 等等其实我才意识到,另一件事是当我在inspector中预览动画时,没有动画,只是角色t-pose。我已经尝试从 mixamo 重新下载动画,但仍然没有成功。【参考方案2】:

抱歉,我找到答案了

【讨论】:

太棒了!但是别喊了:) 对不起,我只是想让人们早点看到它,而不是花时间写一个已经解决的问题的答案。我仍然是堆栈溢出的新手,我很少使用它:) 谢谢

以上是关于我的动画没有在应该播放的时候播放的主要内容,如果未能解决你的问题,请参考以下文章

只有在 Phaser 中还没有动画的情况下,如何播放动画?

在没有用户交互的情况下播放波纹动画

我的声音没有在 Chrome 中播放

CSS3动画如何设置滑动到当屏的时候才触发动画播放

当我点击 X 按钮时,React 和 Styled 组件中没有播放动画

flash网站可以在没有flash播放器的情况下工作吗?