HOME / 第 6 部分 · 数据与进阶开发 / 第 76 课
MODULE 6 · 数据与进阶开发
第 76 课 · 动画系统进阶
🎯 本课学习目标
- 理解骨骼动画概念
- 播放动画中的回调
- 动画与状态机深度整合
从关键帧动画进阶到复杂动画系统:骨骼动画、动画回调、根骨骼运动。
📖 详细教学步骤
骨骼动画是什么?概念
- 关键帧动画:直接动画顶点(简单但僵硬)
- 骨骼动画:动画「骨头」带动网格(自然、灵活)
- Godot 用 AnimationPlayer 播放骨骼动画,模型含骨骼(BoneAttachment3D)
💡 3D 角色模型导入后自带骨骼,用 AnimationPlayer 播放官方/自制的动画。
导入骨骼模型操作
- 把带骨骼的 3D 模型(.glb/.fbx)拖入资源面板
- 拖进场景:自动生成 Node3D + 网格 + 骨骼骨架
- 添加 AnimationPlayer,导入文件自带的动画
- 播放即可看到角色动画
💡 免费角色模型可找 Godot 官方示例或 Mixamo。
动画回调(Event 轨道)实操
在动画里某帧触发函数:
- 打开动画面板,选中 AnimationPlayer
- 添加「方法调用」轨道(Track → 方法调用)
- 在踩地那帧插入关键帧,选择要调用的函数
- 播放动画到该帧自动调用
💡 典型:脚步动画踩地时播放脚步声、攻击动画挥出时播放挥击音效。
动画 Blend(混合)进阶
两个动画平滑混合(如走路+举枪):
GDSCRIPTfunc blend_anims():
# 方法1: AnimationTree 的 BlendSpace2D
# 方法2: 手动混合播放
anim.play("walk")
anim.queue("shoot_pose")
# queue 按顺序播完一个再播下一个
动画时间轴控制代码
精细控制动画:
GDSCRIPTfunc anim_control():
anim.play("attack")
anim.speed_scale = 2.0 # 2 倍速
# 暂停在 50%
anim.pause()
anim.seek(anim.current_animation_length * 0.5, true)
# 从头播
anim.play("attack")
anim.seek(0.0)
动画根骨骼(Root Motion)进阶
- 动画带动角色位移(根骨骼运动)
- Godot 中可在 AnimationPlayer 设置 Root Motion Track
- 走路动画里角色由动画驱动前进,代码只做转向
- 适合「动画驱动型」游戏(格斗、动作冒险)
💡 现代动作游戏常用:动画管动作,代码管逻辑。
动画性能注意
- 远处角色可减少动画播放频率(LOD 动画)
- 别让大量角色同时播放高精度骨骼动画
- 静态时停止动画循环(idle 可一直播但省不了多少)
⚠️
模型没动画?
确认 .glb/.fbx 导入设置里勾选了「导入动画」(Import Animations),且模型本身带骨骼动画。
⚠️
动画里调用的函数没执行?
方法调用轨道的目标节点必须正确,函数必须在目标脚本里存在。
🧪 动手试一试
🏋️ 课后练习
导入一个带骨骼动画的角色,用 AnimationTree 整合 idle/walk/attack 三状态,攻击动画挥出帧触发音效回调。
导入模型 + AnimationTree 状态机 + 方法调用轨道。
💡
骨骼动画把「动作」与「逻辑」解耦,是专业项目的标准。
💡
Mixamo 等网站有大量免费角色动画可下载练手。
🎓 本课小结
骨骼动画:模型带骨架,AnimationPlayer 播动画;方法调用轨道做动画回调;AnimationTree 混合;根骨骼运动让动画驱动位移。