【问题标题】:Non-legacy animation cannot be stopped / controlled非传统动画无法停止/控制
【发布时间】:2015-05-07 02:49:06
【问题描述】:

我使用动画面板制作了一个动画,它会不时交换图像。从网上看,这不是旧动画。

这是动画面板截图:

然后,我将 AnimationAnimator 组件添加到 Game Object 并为其分配名为 Animation01 的动画。这是游戏对象检查器的屏幕截图:

我尝试使用以下 C# 脚本来停止动画:

 using UnityEngine;
 using System.Collections;
 public class Scene1 : MonoBehaviour {
     public GameObject ball;
     // Use this for initialization
     void Start () {
         ball.animation.Stop();
     }

     // Update is called once per frame
     void Update () {

     }
 }

但动画并没有停止。它在控制台中提示一个通知:

在附加的动画列表中找不到默认剪辑。

我错过了什么?


更新:通过禁用/移除 Animator 组件,动画将停止并且无法由代码控制。我需要通过代码来控制动画。

【问题讨论】:

  • 另外,我必须注意:这个问题写得比unity3d标签上的大多数问题要好得多。

标签: c# animation unity3d


【解决方案1】:

Unity 在其整个历史中实现了两个动画系统。 Animation 组件属于legacy animation system,而Animator 组件属于new animation system。因此,添加这两个组件没有任何意义:您要么使用旧系统,要么使用新系统。

旧动画系统和新动画系统的主要区别在于,新动画系统的控制方式要先进得多。但是,这也意味着它更复杂。它增加了另一层抽象:您无需自己启动动画,而是控制影响特殊状态机行为的变量animation controller

因此,如果您想将动画用于非常非常简单的事情,您只想手动启动动画,那么使用旧动画系统可能会更好。但是组件并不是唯一不同的东西:动画文件本身被标记以确定它们是否是“旧版”。默认情况下,当您在新的 unity 版本中创建动画时,它属于新的动画系统。如果要将其与旧动画一起使用,则必须将其标记为旧动画。不幸的是,you'll have to do a little hack to achieve that

【讨论】:

  • 感谢您的回答。我不想将动画标记为旧版(没有必要这样做)。我禁用了 Animation 组件,我可以看到 Animator 正在工作(进度条正在移动)。但是,如何通过代码控制“动画控制器”,例如停止动画?
  • 正如我所说,“动画控制器”增加了另一层抽象,因此如果您使用它,您的代码不必再包含单个动画的概念。相反,你修改动画控制器的外部参数,控制器自己决定切换到什么状态,不同的状态可以附加不同的动画。这是一个很好的教程:unity3d.com/learn/tutorials/modules/beginner/animation/…
  • 谢谢。或者,我设法通过启用和禁用 Animator 组件来启动/停止动画。
  • 你当然可以这样做,但这是一个 hack。另外,如果您只想控制单个动画,只需启动和停止它,那么我会使用旧动画系统。在这种情况下,Animator 只是一个矫枉过正的工具。
猜你喜欢
  • 2015-12-18
  • 2012-10-16
  • 2012-05-23
  • 2013-03-26
  • 2018-02-12
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多