HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 39 课
MODULE 4 · UI 界面 · 动画 · 特效
第 39 课 · AnimationPlayer 动画播放器
🎯 本课学习目标
- 掌握 AnimationPlayer 的基本用法
- 在编辑器中录制关键帧动画
- 用代码播放/暂停动画
让角色动起来:AnimationPlayer 是 Godot 的动画大管家。本课学会关键帧动画。
📖 详细教学步骤
添加 AnimationPlayer搭建
- 在要动画的节点(如玩家)下加子节点
AnimationPlayer - 选中 AnimationPlayer,检查器顶部出现「动画」面板(底部也会出现动画编辑器)
- 点底部动画面板的「动画」下拉 → 新建(New)→ 命名 walk
录制关键帧操作
- 选中玩家精灵 Sprite2D
- 在底部动画面板点 关键帧按钮(菱形) 或按快捷键插入关键帧
- 拖动时间轴到另一个位置,修改精灵的 position/rotation 等属性,再插关键帧
- 点「播放」预览,Godot 自动补间两帧之间
💡 关键帧 = 记录「某时刻某属性的值」,Godot 自动平滑过渡。
动画时间与循环操作
- 时间轴长度:拖动右侧的「结束时间」手柄
- Loop Mode(循环模式):
Linear循环播放、None播一次停 - 走路动画一般循环,跳跃动画一般不循环
用代码控制动画代码
播放、暂停、切换:
GDSCRIPTextends CharacterBody2D
@onready var anim: AnimationPlayer = $AnimationPlayer
func _physics_process(delta):
var moving = Input.is_action_pressed("move_left") or \
Input.is_action_pressed("move_right")
if moving:
anim.play("walk") # 播放走路动画
else:
anim.play("idle") # 播放待机动画
# 其他常用
# anim.pause() 暂停
# anim.stop() 停止
# anim.is_playing() 是否在播放
动画播放完成检测代码
等动画播完再做某事(如攻击结束):
GDSCRIPTfunc _ready():
anim.animation_finished.connect(_on_anim_finished)
func _on_anim_finished(anim_name: String):
print(anim_name, " 播放完成")
if anim_name == "attack":
can_attack = true # 攻击动画结束,允许再次攻击
动画里播放声音/调用函数进阶
在动画时间轴插入「方法调用轨」(Animation Track → 方法调用):
- 可以在动画某帧调用节点的函数(如 play_sound())
- 也可以加属性轨做「镜头抖动」等复杂效果
- 这是高级动画设计,先了解即可
⚠️
动画没播放?
确认:①动画名拼写一致;②动画已创建(不是空);③调用了 play()。
⚠️
动画里改了属性回不去?
动画播放会把属性改成动画值。想恢复初始值,设置动画后或播完调用 anim.seek(0, true) / 重新赋值。
🧪 动手试一试
🏋️ 课后练习
给角色做两个动画:idle(原地微浮动)和 walk(前后移动精灵),用方向键切换播放。
动画编辑器拖时间轴 + 插关键帧;代码按移动状态 play("walk") / play("idle")。
💡
动画面板右下角可调播放速度(播放速率),慢放动画调试很方便。
💡
关键帧快捷键:I(插入),适用于选中属性的时间点。
🎓 本课小结
AnimationPlayer 用关键帧做动画:拖时间轴 → 改属性 → 插帧 → 循环设置;代码里 anim.play(名字) 播放,animation_finished 监听结束。