菜单

动画播放器和轨道

相关源文件

本文档介绍了 Godot 中的动画系统,重点介绍了 AnimationPlayer 节点和动画轨道。它涵盖了动画如何在 Godot 项目中创建、组织和播放。有关混合和状态机等更高级的动画功能,请参阅 动画树

动画系统概述

Godot 动画系统允许您为场景中的任何节点的几乎任何属性设置动画。核心组件包括:

  1. AnimationPlayer - 一个管理和播放动画的节点
  2. Animation - 一个包含按轨道组织的动画数据的资源
  3. Animation Tracks - 用于目标特定动画属性的不同类型的轨道
  4. Animation Libraries - 可以被 AnimationPlayer 使用的动画集合

动画系统架构

来源

AnimationPlayer 节点

The AnimationPlayer 节点是播放动画的主要方式。它继承自 AnimationMixer,并管理一组动画,这些动画可以按顺序播放或在它们之间进行过渡。

关键属性和方法

播放动画

The AnimationPlayer 节点提供了多种控制动画播放的方法:

  • play(name, custom_blend, custom_speed, from_end) - 播放指定的动画
  • play_backwards(name, custom_blend) - 反向播放动画
  • stop() - 停止当前动画
  • queue(name) - 排队等待动画播放完当前动画后播放
  • seek(position, update) - 跳转到动画中的特定位置
// Basic playback example
animation_player.play("walk")
animation_player.queue("idle")

来源

动画过渡

您可以设置动画之间的自定义混合时间,以实现平滑的过渡。

// Setting a blend time of 0.5 seconds between "walk" and "run"
animation_player.set_blend_time("walk", "run", 0.5)

您还可以设置自动过渡,以在动画结束后播放下一个动画。

// "idle" will automatically play after "attack" finishes
animation_player.animation_set_next("attack", "idle")

来源

动画资源

The Animation 资源包含实际的动画数据,按轨道组织。每个动画都有长度、循环模式和步长(帧率)等属性。

动画属性

  • length - 动画的时长(以秒为单位)
  • loop_mode - 动画如何处理循环(无、线性、乒乓)
  • step - 最小播放步长(以秒为单位)

来源

动画轨道

动画由不同类型的轨道组成,每种轨道都用于动画化特定属性。每个轨道都使用路径字符串来定位节点属性。

轨道类型

轨道类型描述常见用途
TYPE_VALUE动画化任意属性位置、颜色、可见性等。
TYPE_POSITION_3D针对 3D 位置进行了优化移动 3D 对象
TYPE_ROTATION_3D针对 3D 旋转进行了优化旋转 3D 对象
TYPE_SCALE_3D针对 3D 缩放进行了优化缩放 3D 对象
TYPE_BLEND_SHAPE动画化混合形状面部表情、变形
TYPE_METHOD在特定时间调用方法触发效果、声音
TYPE_BEZIER使用贝塞尔曲线动画化平滑的属性动画
TYPE_AUDIO在特定时间播放音频声音效果、对话
TYPE_ANIMATION触发其他动画子动画

来源

轨道结构和关键帧

每个轨道包含在特定时间具有值的关键帧(关键帧)。引擎在播放期间在这些关键帧之间进行插值。

轨道路径

轨道路径遵循 NodePath:property[:subproperty] 的格式。例如:

  • Sprite2D:position:x - 动画化 Sprite2D 节点的 X 位置
  • MeshInstance3D:mesh:surface_material_override/0:albedo_color - 动画化材质颜色

来源

动画轨道编辑器

Godot 编辑器提供了创建和编辑动画的综合界面。

编辑器组件

创建和编辑动画

动画轨道编辑器允许您:

  1. 创建新动画
  2. 添加不同类型的轨道
  3. 在特定时间设置关键帧
  4. 编辑关键帧值和过渡
  5. 管理动画标记
  6. 控制播放和可视化

来源

动画播放系统

当动画播放时,AnimationPlayer 会通过以下方式处理动画:

  1. 查找动画的当前位置
  2. 评估该位置的每个轨道的值
  3. 更新目标节点属性
  4. 处理任何方法调用或音频轨道
  5. 在需要时管理多个动画之间的混合

动画回调

动画系统在以下情况下会触发回调:

  • 动画开始时(animation_started
  • 动画更改时(animation_changed
  • 动画完成时(animation_finished
  • 方法轨道被执行

来源

动画库

动画被组织成 AnimationLibrary 资源,这些资源可以添加到 AnimationPlayer 中。每个库可以包含多个动画。

// Accessing animations from a library
var anim = animation_player.get_animation("walk")
var library_anim = animation_player.get_animation("combat/attack")

来源

示例动画工作流

  1. 在场景中创建一个 AnimationPlayer 节点
  2. 创建新动画或动画库
  3. 添加指向场景中节点属性的轨道
  4. 在不同的时间点添加关键帧
  5. 调整插值和过渡曲线
  6. 设置自动播放或使用代码触发动画

来源

动画用例

动画系统可用于

  • 角色移动和动作
  • UI动画和过渡
  • 过场动画和电影序列
  • 环境动画(门、平台)
  • 视觉效果时序
  • 教程和引导式用户体验

结论

Godot动画系统提供了一种强大而灵活的方式来为游戏中的任何属性设置动画。AnimationPlayer 节点作为播放和管理动画的核心控制器,而不同的轨道类型允许您为特定属性设置动画。动画轨道编辑器提供了一个全面的界面,用于可视化地创建和编辑动画。

有关更高级的动画功能,如混合树和状态机,请参阅 Animation Tree 文档,该文档建立在这些核心概念之上。