山高月小,水落石出。

Godot AnimationTree

AnimationTree 是 Godot 动画系统的决策层。它本身不包含任何动画数据,而是指向一个已有的 AnimationPlayer,在运行时根据你的逻辑(状态切换、输入方向、速度值)动态决定“现在该播放什么、如何混合”。当你发现需要在多条动画之间平滑过渡、按方向混合,或在基础动画上叠加一次性动作时,就该引入 AnimationTree 了。 🧭 三种核心组织方式:先选对“大脑” AnimationTree 的根节点决定了它的调度方式,最常用的是以下三种: 根节点类型 解决的问题 典型场景 AnimationNodeStateMachine 离散状态的切换与过渡 idle ↔ walk ↔ jump ↔ attack AnimationNodeBlendSpace2D 连续方向/速度的混合 8 方向移动、walk→run 的速度混合 AnimationNodeBlendTree 分层与叠加(配合 OneShot 等节点) 走路时开枪、受击闪烁叠加在基础动画上 实际项目中,状态机与混合空间通常是嵌套配合的:状态机负责“当前处于什么大状态”(如 Locomotion),而该状态内部的具体方向或速度变化,交给嵌套的 BlendSpace2D 处理。 ⚙️ 前置设置:两步让树跑起来 在写任何代码之前,AnimationTree 需要两个明确的配置,否则它不会驱动任何东西: anim_player 指向数据源:在检查器中将 AnimationTree 的 anim_player 属性指向场景中已有的 AnimationPlayer。 active = true:AnimationTree 默认不激活,必须在检查器中勾选,或在 _ready() 中设置 active = true。 🧩 示例一:最简状态机 —— travel() 事件驱动 适用场景:由代码逻辑直接命令的状态切换,如跳跃、攻击、死亡。 树的结构(在 AnimationTree 编辑器中创建 AnimationNodeStateMachine,添加状态并连线): 1 2 3 4 StateMachine ├── Idle ├── Walk └── Jump 关键代码:状态机播放控制器通过 playback 参数获取,travel() 会立即中断当前状态并转向目标状态,并自动寻找最短路径。 ...

November 4, 2026 · 3 min · zwdart