菜单

动画系统

相关源文件

本文档描述了 Godot 引擎的动画系统,重点关注核心组件、架构以及系统中不同部分之间的交互。Godot 中的动画系统允许创建、编辑和播放动画,这些动画可以随时间修改节点的属性。

有关动画回调和信号的信息,请参阅动画通知。有关动画编辑器 UI 的信息,请参阅动画编辑器 UI。

核心组件

Godot 动画系统由几个关键组件组成,这些组件协同工作,提供了一个灵活而强大的动画框架。

来源

动画资源

Animation 资源构成了动画系统的基础。它存储关键帧,这些关键帧可以通过各种轨道类型随时间修改节点的属性。

每个动画包含多个轨道,每个轨道都针对节点的特定属性路径。轨道包含键(关键帧),用于定义目标属性何时以及如何更改。

来源

动画播放

AnimationPlayer

AnimationPlayer 是用于播放和控制动画的主要节点。它继承自 AnimationMixer,并提供了一种简单的方式来播放场景节点的动画。

来源

AnimationTree

AnimationTree 通过一系列 AnimationNode 的层级混合提供更高级的动画控制。它适用于需要混合多种动画的复杂动画。

来源

动画流程

下图显示了在播放期间动画数据如何在 Godot 动画系统中流动

来源

动画轨道和关键帧

动画轨道是定义动画期间哪些属性会变化的机制。它们的工作方式如下:

来源

高级动画功能

混合树

混合树允许基于参数进行复杂的动画混合。它们构建在一个节点图上,其中每个节点处理动画数据并输出结果。

来源

状态机

状态机根据条件管理不同动画或动画状态之间的转换。

来源

状态机实现

来源

动画编辑器

动画编辑器提供了在 Godot 编辑器中创建和编辑动画的工具。

来源

动画系统内部

核心动画播放过程

动画系统按以下步骤处理动画

  1. 初始化:确定要播放的动画
  2. 推进:根据增量时间计算新的动画位置
  3. 采样:在当前位置从动画轨道检索值
  4. 混合:如有必要,混合多个动画
  5. 应用:将计算出的值应用于目标节点

来源

动画库

Godot中的动画被组织在动画库中,动画库是AnimationPlayer节点可以加载和使用的动画集合。

来源

动画混合

动画混合允许在动画之间进行平滑过渡或混合多个动画。

来源

动画轨道和更新

动画轨道可以通过不同的方式更新,这会影响它们在播放时的行为。

更新模式描述用例
离散(DISCRETE)值在关键帧处突变布尔值、枚举、简单状态更改
连续(CONTINUOUS)值在关键帧之间进行插值大多数数值属性(位置、缩放等)
捕获(CAPTURE)值从当前状态捕获需要匹配场景当前状态的属性
重置(RESET)值重置为原始状态应恢复到初始值的属性

来源

根运动(Root Motion)

根运动是一种技术,其中移动动画从动画数据中提取,并应用于节点本身,而不是应用于其内部骨架。

来源

动画系统架构概述

Godot中的动画系统遵循分层结构

  1. 动画资源 - 包含轨道数据和关键帧
  2. AnimationMixer - 动画播放的基类
  3. AnimationPlayer - 简单的动画播放节点
  4. AnimationTree - 高级动画混合和状态管理
  5. AnimationNode - AnimationTree的构建块
    • AnimationNodeAnimation - 播放单个动画
    • AnimationNodeBlendTree - 使用节点图混合多个动画
    • AnimationNodeStateMachine - 管理基于状态的动画过渡

这些组件共同提供了一个灵活而强大的动画系统,能够处理从简单的属性动画到复杂的角色动画系统的一切。

来源