← 返回首页

Mixamo 动画接入 Godot 笔记

2026-07-15 · 小孔

角色动画是《警匪大作战》的门面,自己手 K 帧太慢,所以走 Mixamo 这条现成路线:下载带骨骼的动画 FBX,修一修,再喂给 Godot 的 AnimationPlayer。这条链路看着简单,中间的坑却不少。这篇把完整流程和我遇到过的几个典型问题记下来。

一、从 Mixamo 下载

Mixamo 上选好角色和动画(idle、run、walk 之类),下载时选 FBX 格式,并且勾选「With Skin」,否则只拿到动画没有蒙皮,进了 Godot 绑不上网格。建议同一角色的所有动画都用同一套骨骼下载,后面拼起来才不会有骨骼对不上的问题。

二、用 Blender 修复

下载的 FBX 不能直接丢进 Godot,通常要过一道 Blender:

这里也踩到过 Blender 5.1 的 FBX 导入 bug(见「模型瘦身」那篇),修完才能正常读。

三、导入 Godot 与 AnimationPlayer

Blender 导出 GLB/FBX 后,拖进 Godot。给角色节点挂一个 AnimationPlayer,把动画片段挂上去。注意 Godot 4 的动画库管理方式和 3.x 略有差别,片段要在 AnimationPlayer 的「动画」面板里逐个确认,重命名成 idlerun 这种好调用的名字。

四、CharacterAnimator 的扩展

我的角色控制器里有个 CharacterAnimator.gd,核心是一个 update_move_anim 函数,根据速度在 idle/run/walk 之间切换。后来加了加速道具,需要让动画也反映「在加速」,于是把函数扩展成两个参数:

func update_move_anim(is_moving: bool, has_speed_boost: bool) -> void:
    if has_speed_boost:
        play("run_fast")
    elif is_moving:
        play("run")
    else:
        play("idle")

这样警察踩到加速道具时,角色会切到更快的奔跑动画,手感一下就出来了。

五、贴图变白与背面剔除

接入后遇到两个视觉 bug:

六、小结

Mixamo 接 Godot 的链路是「下载(带 Skin)→ Blender 修轴向/骨骼 → Godot AnimationPlayer 挂片段 → 脚本里做状态切换」。真正的麻烦不在流程本身,而在骨骼朝向、材质引用、剔除这几个隐蔽点。把 update_move_anim 扩成两参数、用 materials 数组锁材质,基本就稳了。