Godot 节点, AnimationPlayer

Godot 有很多种方式可以做 Animation, 例如 AnimationPlayer, AnimatedSprite, 或者使用 Tween.

视频地址

创建 animation

点击底部的 Animation tab, 再点击 Animation 按钮, 选择 new 新建 animation create_animation

animation_name 名字可以任意起, 例如向左走动的动画可以命名为 “WalkLeft”

右边红框内的时间, 控制动画的总时长 time 蓝框部分是动画的时间轴, 后续通过拉动时间轴, 设置不同时间点的 key frame.

添加 track

一个 animation 里面可以有多个 track, 例如有水平移动的 track, 旋转的 track, 透明度渐变的 track, 还有调用方法的 track 等等.

property track

property_track 先选择需要修改哪个节点的property pick_node_to_animate 然后选择修改这个节点的哪个属性 select_property

把时间轴拉动到开始为止, 在编辑器主页面修改对应节点的对应属性, 然后在 track 上右键点击 insert key insert_key

把鼠标放到菱形节点上, 可以看到这个 key 的详细信息.

接着再把时间轴拖动到其他的时间点, 同上方法创建更多的 key. 点击播放按钮, 节点的属性就会在这几个 key 的值直接变化, 从而达到动画的效果

循环

循环的模式有三种, 不循环, 重新循环和来回. 默认是不循环的方式, 图标是白色的, 播放完指定时长就会停止 cycle 点击图标, 会切换循环的方式.

cycle_blue 蓝色图标表示循环, 当一次播放完后, 时间轴会跳到开始的位置重新播放. 再点击一次图标, 会切换到来回的模式 back_and_forth 当一次播放完后, 时间轴会倒序以同样的速度从后往前播放动画, 播放到开始位置后重新播放.

代码开始播放, 完成播放信号

@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)

需要注意如果是循环的动画, 永远不会完成播放