HOME / 第 6 部分 · 数据与进阶开发 / 第 76 课
MODULE 6 · 数据与进阶开发

第 76 课 · 动画系统进阶

⏱ 预计时长 35 分钟📊 难度 进阶📚 模块 第 6 部分 · 数据与进阶开发

🎯 本课学习目标

从关键帧动画进阶到复杂动画系统:骨骼动画、动画回调、根骨骼运动。

📖 详细教学步骤

骨骼动画是什么?概念

  • 关键帧动画:直接动画顶点(简单但僵硬)
  • 骨骼动画:动画「骨头」带动网格(自然、灵活)
  • Godot 用 AnimationPlayer 播放骨骼动画,模型含骨骼(BoneAttachment3D)

💡 3D 角色模型导入后自带骨骼,用 AnimationPlayer 播放官方/自制的动画。

导入骨骼模型操作

  1. 把带骨骼的 3D 模型(.glb/.fbx)拖入资源面板
  2. 拖进场景:自动生成 Node3D + 网格 + 骨骼骨架
  3. 添加 AnimationPlayer,导入文件自带的动画
  4. 播放即可看到角色动画

💡 免费角色模型可找 Godot 官方示例或 Mixamo。

动画回调(Event 轨道)实操

在动画里某帧触发函数:

  1. 打开动画面板,选中 AnimationPlayer
  2. 添加「方法调用」轨道(Track → 方法调用)
  3. 在踩地那帧插入关键帧,选择要调用的函数
  4. 播放动画到该帧自动调用

💡 典型:脚步动画踩地时播放脚步声、攻击动画挥出时播放挥击音效。

动画 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 混合;根骨骼运动让动画驱动位移。