动画系统
游戏里"动"有两层含义:物理层面的位移与碰撞(前几章的 Transform 和速度),以及视觉层面的形变与表演——角色迈步、武器挥砍、UI 元素弹性过渡。后者就是动画系统的领地。
Bevy 的动画系统由 bevy_animation crate 提供,核心思路是数据驱动:动画数据(曲线、关键帧)存在 AnimationClip 资产里,播放逻辑由 AnimationPlayer 组件控制,多个动画的混合与过渡由 AnimationGraph 描述。整套系统与 ECS 深度集成——动画目标通过 AnimationTargetId(UUID)标识,最终由系统遍历并写入 Transform 等组件。
本章覆盖:
- 用
AnimationClip+AnimatableCurve定义程序化动画,通过AnimationPlayer播放 AnimationGraph:多个动画片段的混合与权重控制AnimationTransitions:平滑的交叉淡入淡出过渡AnimationEvent:动画时间线上的事件触发- 动画遮罩(mask):让动画只影响角色的部分骨骼
- 角色动画状态机:idle / walk / run 的完整切换逻辑
配套 crate 是 code/ch30-animation。本章所有示例均使用程序化动画(AnimationClip + 曲线),不依赖外部 glTF 资产。