Skip to content

小结与练习

小结

本章从零构建了 Bevy 动画系统的完整认知:

  • AnimationClip 存储动画曲线,每条曲线通过 AnimatableCurve + animated_field! 定义属性随时间的变化
  • AnimationGraph 用 DAG 描述多个片段的混合关系,支持 Blend(归一化混合)和 Add(叠加混合)两种节点
  • AnimationPlayer 控制播放——playstartstoppause_allresume_alladjust_speeds
  • AnimationTransitions 实现交叉淡入淡出,适合状态机式的动画切换
  • AnimationEvent 在动画时间线上插入事件,通过 Observer 机制响应
  • 动画遮罩 用位域控制哪些骨骼受哪个片段影响,实现上下半身独立动画
  • 动画目标通过 AnimationTargetId(UUID)定位,AnimatedBy 链接到播放器实体

Bevy 的动画系统还在快速演进——AnimationTransitions 的文档标注为"临时 API",未来可能被更完整的状态机取代。但核心概念(Clip、Graph、Player)已经稳定,值得深入掌握。

练习

  1. 变速播放:在 Listing 30-6 的基础上,用上下箭头调整动画播放速度(ActiveAnimation::set_speed),让角色走得更快或更慢。

  2. 动画事件触发特效:修改 Listing 30-4,在脚步事件触发时用 Commands 在脚部位置 spawn 一个临时粒子(简单的立方体即可,1 秒后 despawn)。

  3. 三路混合:创建一个 AnimationGraph,把 idle、walk、run 三个片段分别挂到权重为 1.0 的节点上,然后在系统里根据一个 f32 值(0.0 = idle,0.5 = walk,1.0 = run)动态调整三个片段的权重,实现速度驱动的动画混合。