动画

动画控制器

动画控制器(AnimatorController)可以帮助你为角色或其他动画对象组织一组动画的播放逻辑。 它通过动画状态机AnimatorStateMachine)像流程图一样可视化的组织动画对象的动画播放逻辑,并在符合条件时自动切换动画状态(AnimatorState)并播放引用的动画片段AnimationClip)。

编辑器使用

通过动画控制器的编辑器,用户可以在其中组织动画片段的播放逻辑

  1. 准备好动画片段(制作动画片段

alt text

  1. 要组织播放这些动画片段我们需要创建一个动画控制器(AnimatorController)资产

alt text

  1. 刚创建的动画控制器中没有任何数据,我们需要对他进行编辑,双击资产, 并为它添加一个动画状态(AnimatorStatealt text

  2. 点击 AnimatorState 为它绑定一个动画片段AnimationClipalt text

  3. 动画控制组件上绑定该动画控制器(AnimatorController)资产 alt text

  4. 至此你在导出的项目中就可以通过 animator.play("New State") 播放 Idle 动画了

对于动画控制器编辑器的进一步使用请参考动画状态机文档。

脚本使用

在使用脚本之前,最好阅读动画系统构成文档,以帮助你更好的了解动画系统的运行逻辑

绑定动画控制器

你可以通过 animator.animatorController  属性来为 Animator 绑定动画控制器。加载完成的 glTF 模型如果有动画数据会为每个glTF实例自动绑定一个默认的 AnimatorController。

animator.animatorController = new AnimatorController(engine);
animator.play("New State");

复用动画数据

Animator 的 animatorController 就是一个数据存储的类,它不会包含运行时的数据。基于这种设计只要绑定 Animator 组件的模型的骨骼节点的层级结构和命名相同,我们就可以使用此模型的动画数据进行复用。

const animator = model1.getComponent(Animator);
// 获取动画模型的动画控制器
animator.animatorController = animationGLTF.getComponent(Animator).animatorController;
// 播放 animationGLTF 的动画
animator.play("anim from animationGLTF");

这篇文档对您有帮助吗?