3ds Max → Unity FBX 导出完整指南
下载 Markdown 含图片下载这是将在 3ds Max 中完成绑定和蒙皮的角色正确导入 Unity 的标准流程。
理解"为什么这样做",即使场景不同也能自行应对。
0. 成功标准 — 看到这个画面就完成了
将 FBX 拖入 Unity,选择 Root(顶层对象)后,Inspector 中的 Transform 应显示如下:
| 项目 | 值 |
|---|---|
| Position | 0, 0, 0 |
| Rotation | 0, 0, 0 |
| Scale | 1, 1, 1 |


为什么这些值很重要?
Root 保持 0 / 0 / 1 的干净状态,才能确保 Prefab 实例化、动画重定向、物理和碰撞体计算都可预测。
如果 Scale 进来是 0.01,或 Rotation 是 -90,误差就会积累到所有子骨骼、网格和动画片段中,事后追查原因将非常困难。在导入时解决问题是最省事的做法。
1. 为什么坐标和单位会不一致?(必备背景知识)
3ds Max 和 Unity 使用不同的坐标系和默认单位。FBX 文件充当两者之间的翻译桥梁——如果导出选项错误,翻译就会出偏差,上述值就会出错。
| 项目 | 3ds Max | Unity |
|---|---|---|
| 上方向轴 | Z-up(Z 朝上) | Y-up(Y 朝上) |
| 坐标系手向 | 右手坐标系 | 左手坐标系 |
| 内部长度单位 | 场景单位自由(推荐 cm) | 1 unit = 1 meter,固定 |
两个核心要点:
- 轴:必须将 Max 的 Z-up 转换为 Unity 的 Y-up,否则角色会横倒。
- 单位:Unity 的 "1 = 1 米" 是绝对固定的。在 Max 中使用 cm 工作时,1cm = 0.01m,FBX 必须正确吸收这 100 倍的差值,Scale 才能落到
1。否则0.01会原样保留。
本指南的所有步骤,最终目标都是"将轴设为 Y-up,将单位基准设为 cm"。
2. STEP 1 — 确认场景单位(cm 基准)
首先确认 Max 场景使用什么单位。进入 Customize > Units Setup 菜单。

将 Display Unit Scale 设置为 Metric → Centimeters。

为什么用 cm?
BipedPlus 的内部计算(高度、缩放等)以 cm 为基准(SSOT)。而且 Max 的标准导出惯例就是 cm,所以设置为 cm 后,后续的 FBX 单位转换会最干净地对齐。
即使工作室流程锁定在 m(米),至少在绑定和导出阶段推荐使用 cm。(m 场景支持是工具后续改进计划)
3. STEP 2 — 轴对齐(Z-up → Y-up)
Max 是 Z-up,Unity 是 Y-up。导出前需要以 Root 为基准,将方向对齐到 Unity 惯例(Y 朝上,Z 朝前)。

在 3ds Max 中,将 Y 设为上方,Z 轴设为正面(前方),即可与 Unity 的方向对齐。
对齐方法:选择 Root,以世界坐标为基准绕 X 轴旋转 +90°。(Rotate Transform Type-In → Absolute:World X = 90)

为什么是 X 轴 90°?
要将 Z-up 空间变换为 Y-up 空间,需要将上方向向量从 Z 旋转 90° 到 Y。这个旋转正好弥补了两个引擎"上方向"定义的差异。
4. STEP 3 — 只选择导出对象(蒙皮骨骼 + 网格)
导出时,只选择蒙皮骨骼树 + 网格(几何体)。控制器、辅助体、绑定组(Ctrl_World、Grp_Rig、Drv_Root 等)不要包含在内。

为什么不能导出整个骨架?
Unity 实际需要的只是蒙皮网格 + 驱动它的骨骼。绑定控制器/辅助体在游戏引擎中毫无用处,而且还会:
- 增加不必要的骨骼层级,使导入变重,
- 混入带有缩放/偏移的控制节点,导致 Scale 0.01 之类的污染。
原则:只导出"游戏需要的内容"。
5. STEP 4 — FBX 导出选项
(1) Include — 动画和变形
- 勾选 Animation
- 勾选 Deformations → Skins, Morphs(蒙皮权重和形态键需要一起导出)

(2) Advanced Options — 单位和轴
这是最关键的部分。前面讲解的单位和轴转换在这里最终确定。
| 选项 | 值 | 含义 |
|---|---|---|
| Units → Automatic | 勾选 | 自动检测并转换场景单位 |
| Scene units converted to | Centimeters | 场景是 cm,所以以 cm 导出 |
| Scale Factor | 1.0 | 无额外倍率(转换由单位负责) |
| Axis Conversion → Up Axis | Y-up | 对齐 Unity 的上方向轴 |

为什么是这个组合?
Scale Factor 1.0 + cm + Y-up 的组合下,Unity 导入时会自动吸收 cm→m(÷100)和轴转换,使 Root Scale 精确落在 1.0。随意改动 Scale Factor 会重新引入 100 倍/0.01 倍的误差。
Unity 的 Up 轴是 Y,所以导出时必须选 Y-up。
6. STEP 5 — 在 Unity 中验证
将 FBX 导入 Unity,选择 Root,确认是否与 [0. 成功标准] 一致:
- Position 0, 0, 0
- Rotation 0, 0, 0
- Scale 1, 1, 1
三项全部匹配,即导入成功。
7. 常见错误与故障排除
错误 1 — Root Scale 以 0.01 进来

不要包含 Transform 不是默认值的 Root 骨骼。
原因:将 Transform 未重置(非默认值)的 Root/控制节点包含在导出中。该节点上的 0.01 缩放(或 cm↔m 未转换量)会直接 bake 进 Unity Root。
解决方法:
- 从导出对象中排除控制器/辅助体 Root,只导出 Transform 干净的蒙皮骨骼树 + 网格。(参见 STEP 3)
- 再次确认 FBX 选项中 Scale Factor 为 1.0,Units = Centimeters。
Q&A — Scale 显示 0.9999999,有问题吗?

结论:正常。 3D 图形以浮点数(floating point)存储值,经过多次矩阵变换(旋转、单位换算等)后,1.0 可能会细微偏移为 0.9999999。这不是误差,而是运算的自然舍入结果,对实际使用没有影响。
如果仍然想要干净的 1.0:将该节点的 Transform 用 PRS 通道重置,然后将 Position 替换为 Position Constraint,将 Rotation 替换为 Orientation Constraint。(用纯 PRS 替代 Transform Script)

这样可以消除累积误差,使值归整。

8. 最终检查清单
导出前只需确认这 5 项:
- [ ] 单位:场景设置为 Centimeters(
Customize > Units Setup) - [ ] 轴:Root 绕 World X 旋转 +90°(Y-up 对齐)
- [ ] 选择:只选蒙皮骨骼树 + 网格(排除控制器和辅助体)
- [ ] FBX 选项:Units
Automatic / cm,Scale Factor1.0,Up AxisY-up,勾选 Animation·Skins·Morphs - [ ] Unity 验证:Root Transform =
0/0/0 · 0/0/0 · 1/1/1
0.9999999的 Scale 是正常的浮点误差。只有觉得有必要时,才用 PRS 重置 + Constraint 整理。