Godot 有很多种方式可以做 Animation, 例如 AnimationPlayer, AnimatedSprite, 或者使用 Tween.
创建 animation
点击底部的 Animation tab, 再点击 Animation 按钮, 选择 new 新建 animation
名字可以任意起, 例如向左走动的动画可以命名为 “WalkLeft”
右边红框内的时间, 控制动画的总时长
蓝框部分是动画的时间轴, 后续通过拉动时间轴, 设置不同时间点的 key frame.
添加 track
一个 animation 里面可以有多个 track, 例如有水平移动的 track, 旋转的 track, 透明度渐变的 track, 还有调用方法的 track 等等.
property track
先选择需要修改哪个节点的property
然后选择修改这个节点的哪个属性
把时间轴拉动到开始为止, 在编辑器主页面修改对应节点的对应属性, 然后在 track 上右键点击 insert key
把鼠标放到菱形节点上, 可以看到这个 key 的详细信息.
接着再把时间轴拖动到其他的时间点, 同上方法创建更多的 key. 点击播放按钮, 节点的属性就会在这几个 key 的值直接变化, 从而达到动画的效果
循环
循环的模式有三种, 不循环, 重新循环和来回.
默认是不循环的方式, 图标是白色的, 播放完指定时长就会停止
点击图标, 会切换循环的方式.
蓝色图标表示循环, 当一次播放完后, 时间轴会跳到开始的位置重新播放.
再点击一次图标, 会切换到来回的模式
当一次播放完后, 时间轴会倒序以同样的速度从后往前播放动画, 播放到开始位置后重新播放.
代码开始播放, 完成播放信号
@onready var animation_player = $AnimationPlayer
func _ready():
animation_player.play("animation_name")
调用 AnimationPlayer 对象的 play 方法, 传入创建 animation 时设置的名字, 就可以开始播放动画. 需要注意的是, 同一个 AnimationPlayer 对象在同一时刻, 只能播放一个 Animation, 如果连续调用多个 play, 传入不同的 animation 名字, 只有最后一个会生效, 因为前面的被覆盖了.
AnimationPlayer 节点继承了 AnimationMixer, 因此继承了一个信号 animation_finished. 当一个动画播放完会触发这个信号, 传入完成播放的动画名
func _on_animation_player_animation_finished(anim_name):
print(anim_name)
需要注意如果是循环的动画, 永远不会完成播放