动画功能介绍

概览

AnimationPlayer 节点允许您创建从简单到复杂的任何动画.

在本指南中,您将学会:

  • 使用动画面板

  • 使任何节点的任何属性变成动画

  • 创建一个简单的动画

  • 使用功能强大的Call Function Tracks调用函数

在Godot中,你可以为属性面板中可用的任何内容设置动画.例如节点转换,子画面,UI元素,粒子,材质的可见性和颜色等等.您还可以修改脚本变量的值并调用任何函数.

创建一个AnimationPlayer节点

要使用动画工具,我们首先必须创建一个 AnimationPlayer 节点.

AnimationPlayer节点类型是动画的数据容器.一个AnimationPlayer节点可以保存多个动画,这些动画可以自动相互转换.

The AnimationPlayer node

AnimationPlayer节点

创建后,单击节点选项卡中的AnimationPlayer节点,打开视窗底部的动画面板.

The animation panel position

动画面板位置

它由四部分组成:

The animation panel

动画面板

  • 动画控件(即添加、加载、保存和删除动画)

  • 轨道列表

  • 带有关键帧的时间轴

  • 时间轴和轨道控件,例如,您可以在其中缩放时间轴和编辑轨道.

计算机动画依赖于关键帧

关键帧定义属性在某一时间点的值.

菱形代表时间轴中的关键帧.两个关键帧之间的线表示该值未更改.

Keyframes in Godot

Godot中的关键帧

引擎在关键帧之间插入值,导致值随时间逐渐变化.

Two keyframes are all it takes to obtain a smooth motion

只需两个关键帧就可以获得一个平滑运动

时间轴可以让你插入关键帧并更改它们的时序.它还定义动画的时间.

The timeline in the animation panel

动画面板中的时间轴

动画面板的每一行都是一个动画轨道.普通和转换轨道引用节点属性.它们的名称或id是指向节点和受影响属性的路径.

Example of Normal animation tracks

普通动画轨道的示例

小技巧

如果你的动画属性错误,你可以随时编辑轨道路径.双击它并输入新的路径.使用 “从头开始播放” 按钮|从头开始播放|(或按键盘上的 Shift + D )播放动画,可以立即看到变化.

教程:创建一个简单的动画

场景设置

在本教程中,我们将创建一个AnimationPlayer节点和一个sprite节点作为其子节点.

Our scene setup

我们的场景设置

这个精灵拥有一个图像纹理.我们对该精灵进行动画处理,使其在屏幕上的两点之间移动.在本教程中,使用默认的Godot图标作为精灵的纹理.将精灵移动到屏幕上的左边位置作为起点.

小技巧

将动画节点作为子节点添加到AnimationPlayer节点不是强制要求的,但是这是一种很好的方法来区分动画节点和场景树中的非动画节点.

选择AnimationPlayer节点,然后点击动画编辑器中的 “Animation” 按钮.从列表中选择 “New” (Add Animation)来添加一个新的动画.并在对话框中为该动画输入一个名称.

Add a new animation

添加一个新的动画

添加轨道

要为我们的精灵添加一个新的轨道,选择它并在工具栏中查看:

Convenience buttons

方便按钮

这些开关和按钮允许您为选择的节点的位置、旋转和比例分别添加关键帧.

取消选择旋转,因为我们只对本教程的精灵位置感兴趣,并单击键按钮.

由于我们还没有为变换或位置属性设置轨道,Godot询问是否应该设置,点击 Create .

这会在时间轴的开头创建一个新轨道和第一个关键帧:

The sprite track

精灵跟踪

第二个关键帧

现在我们需要设置我们的精灵应该到达的目的地以及到达那里需要多长时间.

让我们说,我们希望它需要2秒才能到达另一个点. 默认情况下,动画设置为仅持续1秒,因此在动画面板下方面板的时间轴控件中将其更改为2.

Animation length

动画长度

点击2秒附近的时间线标记,将精灵移动到右侧的目标目的地.

再次单击工具栏中的键按钮. 这创建了我们的第二个关键帧.

运行动画

单击 从头开始播放 (|从开头播放|)按钮.

好极了! 我们的动画运行:

The animation

动画

来来回回

Godot在这里还有一个额外功能.就像之前说的,Godot总是计算两个关键帧之间的帧数.在一个循环中,如果最后没有指定关键帧,第一个关键帧将也是最后一个关键帧.

Animation loop

动画循环

如果你现在将动画长度设置为4秒,动画就会来回移动.如果改变轨道的循环模式,你可以改变这种行为.这将在下一章中介绍.

轨道设置

每条轨道最后都有一个设置面板,可以设置更新模式、轨道插值、循环模式。

Track settings

轨道设置

轨道的更新模式告诉 Godot 何时更新属性值。这可以是:

  • 连续:每帧都更新属性

  • 离散:仅在位于关键帧时更新属性

  • 触发器:仅在位于关键帧或触发器时更新属性

  • 捕获:记住属性的当前值,并将其与找到的第一个动画关键帧混合

Track mode

轨道模式

在普通动画中,你通常使用“连续”。其他类型可用于编排复杂动画。

插值告诉 Godot 如何计算关键帧之间的帧值。支持的插值模式有:

  • 临近:设置为最接近的关键帧的值

  • 线性:使用线性函数计算两个关键帧之间的值

  • 三次方:使用三次函数计算两个关键帧之间的值

Track interpolation

轨道插值

立方插值导致更自然的运动,其中动画在关键帧处较慢而在关键帧之间更快. 这通常用于角色动画. 线性插值创造了更多的机器人运动.

Godot支持两种循环模式,如果将其设置为循环,则会影响动画:

Loop modes

循环模式

  • 钳位循环插值:选择此选项后,动画将在此轨道的最后一个关键帧之后停止. 再次到达第一个关键帧时,动画将重置为其值.

  • 包循环插值:当选择此项时,Godot会在最后一个关键帧之后计算动画,以再次达到第一个关键帧的值.

其他属性的关键帧

Godot不限制您只编辑变换属性. 每个属性都可以用作可以设置关键帧的轨道.

如果你在动画面板可见时选择你的精灵,会获得一个小的关键帧按钮,用于显示精灵的所有属性.点击这个按钮,Godot就会自动为当前动画添加一个轨道和关键帧.

Keyframes for other properties

其他属性的关键帧

编辑关键帧

对于高级使用和详细编辑关键帧,您可以点击它们,在属性面板中弹出关键帧编辑器,可以用它来直接编辑值.

Keyframe editor editing a key

关键帧编辑器编辑一个键

此外,还可以通过单击并拖动缓动设置来编辑此关键帧的缓动值.这将告诉戈多,当它到达此关键帧时如何更改属性值.

当这个动作”看起来不正确”时,您通常会以这种方式调整您的动画.

高级:调用方法轨道

Godot的动画引擎并不止于此.如果你已经熟悉了Godot的脚本语言 GDScript 基础Godot API ,你就知道每个节点类型都是一个类,并且有一堆可调用的方法.

例如 AudioStreamPlayer 节点类型有一个播放音频流的方法.

在动画中的特定关键帧中使用一个方法不是很好吗?这时,”调用方法轨道” 就派上用场.这些轨道再次引用一个节点,没有引用属性,取而代之的是,一个关键帧保存着一个方法的名称和参数,当Godot到达这个关键帧时,它将调用这个方法.

为了演示,我们将使用调用方法轨道在特定关键帧处播放音频. 通常,要播放音频,你应该使用音轨,但是为了演示方法,我们将采用这种方式.

在场景树中添加 AudioStreamPlayer,并使用放在项目中的音频文件设置流.

单击动画面板轨道控件上的”添加轨道”(|添加轨道|).

从可能的轨道类型列表中选择 “添加调用方法轨道”.

Add Call Method Track

添加调用方法轨道

在选择窗口中选择 :ref:`class_AudioStreamPlayer`节点. Godot添加了轨道节点的引用.

Select AudioStreamPlayer

选择AudioStreamPlayer

右键单击 Godot 播放示例的时间线,然后单击”插入关键帧”选项. 这将显示可为 AudioStreamPlayer 节点调用的方法的列表. 选择第一个.

../../_images/animation_method_options.png

当Godot到达关键帧时,Godot调用 AudioStreamPlayer 节点的 “play” 函数,播放流媒体.

你可以通过在时间轴上拖动它来更改其位置,也可以单击关键帧并使用检查器中的关键帧设置.

../../_images/animation_call_method_keyframe.png