Blender 到 Unity 导出检查清单:正确处理缩放、轴向、骨骼和动画(2026)
最后更新:2026 年 9 月。

要将 Blender 模型以正确尺寸、正确朝向和 Unity 可识别的骨骼导入 Unity,请通过 File > Export > FBX (.fbx) 导出 FBX,并将 Apply Scalings 设为 FBX Units Scale(或 FBX All)、Forward 设为 -Z、Up 设为 Y,启用 Apply Unit,关闭 Add Leaf Bones,将 Smoothing 设为 Face,并将 Path Mode 设为 Copy,同时启用 Embed Textures。不要把 .blend 文件直接放进 Assets;在 Unity 的 glTFast 导入器无需额外处理即可播放动画之前,glTF 只适合用于静态道具。下文会解释每项设置为何重要、设置错误时会出现什么现象,以及如何在 Blender 或 Unity 端修复。
快速答案
- **格式:**凡是带骨骼或动画的内容都使用 FBX。glTF(.glb)仅用于静态道具,而且需要先安装
com.unity.cloud.gltfast包。切勿直接使用原始 .blend 文件。 - **缩放:**在 Blender 的 Scene Properties 中,将 Unit System 设为 Metric,Unit Scale 设为 1.0。在导出器中,将 Scale 设为 1.00、Apply Scalings 设为 FBX Units Scale,并勾选 Apply Unit。在 Unity 中,将 Scale Factor 设为 1,并勾选 Convert Units。一个身高 1.8 米的角色应显示为 1.8 个单位高,且每个变换的缩放都应为 1。
- **轴向:**在导出器中使用 Forward -Z、Up Y(默认值)。在 Unity 的 Model 选项卡中勾选 Bake Axis Conversion,这样根变换上的 X 轴 -90 度旋转就会消失。
- **骨骼:**取消勾选 Add Leaf Bones。如果导出的是 Rigify 或 Auto-Rig Pro 控制骨架,请勾选 Only Deform Bones。以 T Pose 建模,并根据身体部位命名骨骼,以便 Humanoid Avatar 自动完成映射。
- **动画:**每个动画片段使用一个 Action,或者每个动画片段使用一个 NLA 条带。保持 NLA Strips 和 All Actions 开启,同时开启 Key All Bones,并将 Sampling Rate 设为 1。在 Unity 的 Animation 选项卡中,每个 FBX AnimStack 会显示为一个动画片段。
- **纹理:**将 Path Mode 设为 Copy,并开启 Embed Textures。在 Unity 的 Materials 选项卡中先点击 Extract Textures,再点击 Extract Materials。粉色表示着色器与你的渲染管线不匹配,而不是纹理缺失。
快速参考
以下是会影响 Unity 的 Blender FBX 导出器设置、推荐值及其原因。选项名称和说明来自 Blender 手册以及导出器的源代码。
| 面板 | 设置 | 用于 Unity 的值 | 原因 |
|---|---|---|---|
| Include | Selected Objects | 开启 | 不应把摄像机、灯光和参考平面一并发布 |
| Include | Object Types | Armature、Mesh(如果使用定位器,则包括 Empty) | 摄像机和灯光会作为 Unity 组件导入,而你之后仍要将其删除 |
| Transform | Scale | 1.00 | 任何其他值都会在文件中烘焙一个来历不明的缩放倍数 |
| Transform | Apply Scalings | FBX Units Scale 或 FBX All | 将米到厘米的换算系数写入文件头,而不是写入每个对象 |
| Transform | Forward / Up | -Z Forward、Y Up | Unity 使用 Y 轴朝上、Z 轴朝前 |
| Transform | Apply Unit | 开启 | 遵循 Scene 中的单位设置 |
| Transform | Use Space Transform | 开启 | 将轴向转换写入对象旋转 |
| Transform | Apply Transform | 关闭 | 导出器本身说明该选项用于骨架和动画时存在问题 |
| Geometry | Smoothing | Face | Unity 需要平滑组来处理混合形状法线 |
| Geometry | Apply Modifiers | 开启 | 导出经过求值的网格(镜像、细分、三角化) |
| Armature | Primary / Secondary Bone Axis | Y / X(默认值) | Unity 并不在意,但动画重定向工具会在意 |
| Armature | Armature FBXNode Type | Null | 默认值,导入后成为空的根 GameObject |
| Armature | Only Deform Bones | 控制骨架开启,普通骨架关闭 | 防止 IK 目标和控制器进入骨骼层级 |
| Armature | Add Leaf Bones | 关闭 | 否则每条骨骼链末端都会出现 Unity 可见的 _end 骨骼 |
| Bake Animation | Key All Bones、NLA Strips、All Actions、Force Start/End Keying | 全部开启 | 每个动画片段对应一个 AnimStack,并为每根骨骼设置关键帧 |
| Bake Animation | Sampling Rate / Simplify | 1.0 / 1.0 | 每帧一个关键帧,并进行轻度曲线清理 |
| Main | Path Mode / Embed Textures | Copy / 开启 | 纹理会嵌入 .fbx 文件并随之传输 |
不要把 .blend 文件直接放进 Assets
Unity 会接受 .blend 文件,而这正是陷阱所在。Unity 的专有格式页面解释了具体过程:“要将专有文件直接导入 Unity,你需要安装相应的 3D 建模软件”,并且“第一次将专有文件导入 Unity 时,3D 建模软件必须以命令行进程的方式启动。”Unity 实际上会在后台运行 Blender 的 FBX 导出器,而且你无法控制其设置,因此只能得到导出器的默认配置,包括末端骨骼以及会导致本页大多数问题的缩放处理方式。
同一页面还列出了 .blend 方式无法完成的事项:“纹理和漫反射颜色不会自动分配”,以及“Blender 不会将动画中的可见性值导出到 FBX 文件中。”Unity 的 3D 格式页面还指出了团队协作方面的问题:保存为 .blend 的资源“无法导入,除非你的计算机上安装了对应的 3D 建模软件”,因此“所有参与 Unity 项目的人员都必须安装正确的软件”,包括构建机器。Unity 自己给出的结论是:“最佳实践是尽可能使用 .fbx 文件格式,并且不要在正式制作中使用专有模型文件格式。”
将 .blend 文件保存在 Assets 之外的源文件夹中(或放进名称以 ~ 结尾、会被 Unity 忽略的文件夹),然后将 FBX 导出到 Assets 中。
2026 年在 Unity 中应该使用 FBX 还是 glTF
使用 FBX。Unity 的导入器原生支持 .fbx、.dae、.dxf 和 .obj,其 3D 格式页面完全没有提及 glTF。glTF 支持来自 Unity glTFast。你可以依次选择 Window > Package Manager > Add package by name,并输入 com.unity.cloud.gltfast 来添加该包。它自 2023 年 12 月起成为 Unity 官方包,截至 2026 年 3 月版本为 6.17.0。其安装页面说明,Editor 会安装最新版本及其依赖项。安装后,将 .glb 文件放入 Assets 即可通过 ScriptedImporter 导入,并且它支持 Built-in、URP 和 HDRP。
有三个问题使它无法成为角色资源的默认选择。其功能页面指出,动画仅“通过旧版 Animation System”得到完整支持;对于 Mecanim,则说明“动画片段可以以兼容 Mecanim 的方式导入,但不会自动分配,而且未经进一步处理无法播放。”Draco、KTX2 和 Meshopt 还分别需要额外的包(com.unity.cloud.draco、com.unity.cloud.ktx、com.unity.meshopt.decompress)。此外,Unity 的纹理导入器支持 BMP、EXR、GIF、HDR、IFF、JPG、PICT、PNG、PSD、TGA 和 TIFF,但不支持 WebP,因此 glTFast 6.17 专门为 WebP 图像增加了错误提示。针对 Web 优化的 GLB(使用 WebP 纹理和 Draco)并不适合 Unity。
glTF 很适合静态道具,也适合从服务器运行时加载的内容,在这些场景下 glTFast 表现出色。对于需要进入 Animator Controller 的绑定动画角色,请导出 FBX。如果你已有 GLB 文件,可以使用 GLB 查看器检查其中的内容;Blender 也能顺利导入它,以便重新导出。
缩放:为什么模型导入后大了 100 倍,或者所有内容的缩放都变成 0.01
FBX 使用厘米作为度量单位,而 Blender 使用米。导出器的单位换算代码只有一行:Blender 到 FBX 的换算系数是 100.0 * scene.unit_settings.scale_length,旁边的注释指出 FBX 会“将文件的‘参考’单位存储在 UnitScaleFactor 属性中(1.0 表示厘米)”。因此,每次以米为单位导出时,这个 100 倍系数都会存在于某处,而 Apply Scalings 下拉选项决定它存放在哪里。
默认选项 All Local 的说明是:“将自定义缩放和单位缩放应用到每个对象变换,FBX 缩放保持为 1.0。”文件中的每个对象都会在其变换上获得 100 的缩放。随后,Unity 的 Model 选项卡会应用 Convert Units;该选项会“将模型文件中定义的模型缩放转换为 Unity 的缩放”。最终,Prefab 看起来尺寸正确,但网格缩放是 100,而文件缩放是 0.01,两者相互抵消。这就是著名的 0.01 问题。它表面上可以正常工作,直到你把某个对象设为骨骼的子对象、通过代码驱动变换或进行动画重定向时,隐藏的 100 倍缩放才会暴露出来。
FBX Units Scale 的含义是:“将自定义缩放应用到每个对象变换,并将单位缩放应用到 FBX 缩放。”这样,100 倍系数会移入文件的单位头信息,而每个对象的缩放都保持为 1。FBX All 会同时把单位系数和自定义 Scale 值写入文件头;只要 Scale 保持为 1.00,结果就相同。两者都适用于 Unity。Unity 端应保持默认设置:Unity 的 Model 选项卡说明,之所以存在 Scale Factor,是因为“Unity 的物理系统要求游戏世界中的 1 米等于导入文件中的 1 个单位”,因此应将其保持为 1,并保持勾选 Convert Units。
另外两种缩放错误也很常见。如果你为了使用厘米而在 Scene Properties 中更改了 Unit Scale,导出器会乘以 100 再乘以该 Unit Scale。Blender 手册指出,该设置“只会影响用户界面中显示的值,而不会影响内部行为方式”,因此 Unit Scale 为 0.01 并启用 Apply Unit 时,可能会把一个 180 厘米高的角色缩小到 1.8 厘米。对象缩放不是 1.0 时,也会被烘焙进 FBX。选中所有内容并执行 Object > Apply > All Transforms(Ctrl-A)。Blender 手册也建议:“建议在绑定和制作动画之前应用变换。”不要对已经带有动画的骨架应用缩放,因为这会同时缩放关键帧。
坐标轴:X 轴上的 -90 从何而来
Blender 使用 Z 轴朝上。FBX 手册说得很直白:“Blender 使用 Y Forward、Z Up(因为前视图沿 +Y 方向观察)。例如,应用程序通常使用 Y 作为上轴,在这种情况下需要使用 -Z Forward、Y Up。”Unity 使用 Y 轴朝上、Z 轴朝前。Blender 的前视图沿 +Y 方向观察,因此面向前视相机建模的角色实际朝向 -Y,而导出器默认的 -Z Forward 和 Y Up 正是将其映射到 Unity 前方所需的设置。保持不变即可。
即使坐标轴设置正确,Blender FBX 的根对象在 Unity Inspector 中仍会显示 X 轴旋转 -90(通常是 -89.98),子对象上则带有补偿旋转。这是因为坐标轴转换被存储为变换,而不是烘焙进顶点。以下是消除它的三种方法,按推荐顺序排列。
**在 Unity 中使用 Bake Axis Conversion。**Model 选项卡中的这个选项会“在导入使用不同坐标轴系统的模型时,将坐标轴转换结果直接烘焙到应用程序的资源数据中(例如顶点或动画数据)”。勾选后,根对象会显示 0, 0, 0,且无需在 Blender 中做任何更改。
**在 Blender 中反向旋转补偿。**应用所有变换后,将对象绕 X 轴旋转 -90 度并应用旋转,然后再绕 X 轴旋转 +90 度,不应用旋转就直接导出。导出器的 Use Space Transform(“对对象旋转应用全局空间变换”)会让这个 +90 度在 Unity 端变为零旋转。社区插件可以自动完成此操作:blender-to-unity-fbx-exporter 项目会让每个导出对象“在其变换中绕 X 轴旋转 +90 度,而不实际修改视觉姿势”,并在导出后恢复。
**使用导出器中的 Apply Transform。**对于任何已绑定的内容都不要这样做。它自己的说明以“(警告!实验性选项,风险自负,已知会破坏骨架/动画)”结尾,而且导出器会在旁边显示错误图标。它对静态道具有效,但完全可以不用。
骨骼:叶骨骼、朝向与 Humanoid Avatar
**叶骨骼。**Add Leaf Bones 默认启用,其说明是“在每条骨骼链末端追加一根最终骨骼,以指定最后一根骨骼的长度(当你打算编辑导出数据中的骨架时使用)”。导出器会以父骨骼名称加 _end 为每根叶骨骼命名,因此 Unity 的层级结构中会充满 Head_end、LeftHand_end 和 LeftToeBase_end。它们对 Generic 绑定无害,但会干扰 Humanoid 自动映射和重定向工具。取消勾选。如果你要重新导入他人的 FBX,导入器中的 Ignore Leaf Bones 选项可以移除它们。
**控制绑定。**Rigify 或 Auto-Rig Pro 绑定包含数百根用于控制器、IK 目标和机械结构的非变形骨骼。Only Deform Bones 会写入“仅变形骨骼(以及拥有变形子骨骼的非变形骨骼)”,这正是 Unity 所需的骨架。请先将动画烘焙到变形骨骼上,因为控制绑定的约束本身不会导出,只会将其结果作为关键帧导出。
**骨骼朝向。**Blender 骨骼沿其局部 Y 轴指向。Unity 会读取绑定姿势和蒙皮权重,并按收到的数据播放,因此 Primary 和 Secondary Bone Axis 设置可以保持为 Y 和 X。只有当同一个 FBX 还要导入假定特定约定的工具(例如 Unreal 或重定向插件)时,这些设置才重要。
**Humanoid Avatar。**Unity 的 Rig 选项卡提供 Generic(“如果你的绑定不是人形,例如四足动物或任何需要动画的实体”)和 Humanoid(“如果你的绑定是人形,即有两条腿、两条手臂和一个头部”)。Humanoid 可解锁角色之间的动画重定向,但它也有一些规则,详见 Avatar 配置页面。骨架需要“至少 15 根骨骼,并以大致符合真实人体骨架的方式组织”。“如果 Unity 无法创建 Avatar,Configure 按钮旁边会出现一个叉号,也不会出现 Avatar 子资源。”在 Configure 中,Unity 接受的骨骼“会在 Avatar Mapping 选项卡中显示为绿色”,被拒绝的骨骼则“显示为红色”。姿势也有要求:“如果骨骼分配正确,但角色姿势不正确,你会看到消息 ‘Character not in T-Pose’。你可以尝试从 Pose 菜单中选择 Enforce T-Pose 来修复。” 因此,请让绑定和静止姿态都保持 T 姿势,并根据身体部位为骨骼命名(Unity 对自动映射的建议是,骨骼名称应“能够反映其所代表的身体部位”)。Mixamo 命名(mixamorig:Hips、mixamorig:LeftArm)通常都能可靠地自动映射,这也是许多绑定师采用这套命名的原因之一。如果少数骨骼映射失败,可将它们从 Hierarchy 拖到对应插槽中,然后依次点击 Pose > Enforce T-Pose 和 Apply,并将结果保存为 Human Template(.ht),供同一绑定下次导出时使用。
如果你还没有绑定,自动绑定指南介绍了自动绑定工具对网格的要求;Cinevva Rig 插件则可以在你自己的电脑上离线运行,为 Blender 中的模型生成采用 Mixamo 命名的人形骨架。它支持 Windows、macOS 和 Linux 上的 Blender 4.2 及更高版本,首发一次性价格为 $29。
根运动
根运动是角色根节点在世界中的移动,与四肢原地运动相对。Unity 的根运动页面使用 Root Transform,它“是 Body Transform 在 Y 平面上的投影,并在运行时计算”;对于每个剪辑,你可以选择将旋转、Y 和 XZ 烘焙到姿势中,或将其保留为用于移动 GameObject 的运动。对于待机动画,通常应在 XZ 上启用 Bake Into Pose,“强制增量 Position (XZ) 为 0”,以免角色发生漂移。对于 Generic 绑定,该页面说明:“不会使用 Body Transform 来计算/投影 Root Transform,而是使用 Root Node 中设置的变换”;Rig 选项卡中的 Root Node 默认值为 None,因此需要在那里选择髋部或根骨骼,否则根运动不会生效,也不会给出提示。
在 Blender 端,规则是:将位移动画制作在骨骼上,而不是骨架对象上。导出器会将骨架对象写为 Null 节点(Armature FBXNode Type,“类似于 Blender 的 Empty”),而 Unity 的根运动设置会检查 Avatar 下的骨骼,而不是这个空节点。最符合 Unity Root Node 选项设计的结构是:在地面位置创建一根专用根骨骼,使其成为 Hips 的父级,并在其上为位移设置关键帧。对于原地制作、由代码处理位移的剪辑,则完全不需要根骨骼,大多数动画库提供的也正是这种动画。
动画:Action、NLA 条带与烘焙
Unity 会读取 FBX AnimStack,并在 Animation 选项卡中将每个 AnimStack 显示为一个剪辑,你可以在那里拆分、重命名、循环和裁剪它们。Blender 的 Bake Animation 面板决定最终会生成多少个 AnimStack。
每个剪辑一个 Action。 启用 All Actions 后,导出器会“将每个 Action 导出为独立的 FBX AnimStack,而不是全局场景动画(请注意,动画对象会获得所有与其兼容的 Action,其他对象则不会获得任何动画)”。将 Action 分别命名为 Idle、Walk、Run、Jump,Unity 就会以这些名称列出它们。但要注意这段说明中的隐患:只要某个 Action 的通道与骨架匹配,就会被视为兼容,因此另一个绑定遗留的 Action 也可能附加进来。请删除不打算随文件发布的 Action。
每个剪辑一个 NLA 条带。 启用 NLA Strips 后,导出器会“将每个未静音的 NLA 条带导出为独立的 FBX AnimStack(如果存在),而不是全局场景动画”。将每个 Action 分别下推到独立轨道,并将不准备发布的轨道静音,这样既能精确控制帧范围,也能导出由两个 Action 混合而成的剪辑。
涉及约束时先烘焙。 Blender FBX 手册将约束列为无法导出的内容:“使用约束所产生的结果会作为关键帧动画导出,但约束本身不会保存在 FBX 中。”IK、Copy Rotation 和 Child Of 会按导出 Sampling Rate 采样,因此应保持启用 Key All Bones(“强制为所有骨骼导出至少一个动画关键帧”)和 Force Start/End Keying。Unity 自身的 Bake Animations 选项“仅适用于 Autodesk Maya、Autodesk 3ds Max 和 Cinema 4D 文件”,所以烘焙必须在 Blender 中完成。在副本上使用 Object > Animation > Bake Action,并启用 Visual Keying 和 Clear Constraints,即可得到任何软件都不容易误读的纯 FK Action。
简化。 导出器的 Simplify(“烘焙值的简化程度,0.0 表示禁用,数值越高,简化程度越高”)默认为 1.0,对游戏动画通常很安全。如果某个剪辑在 Unity 中出现抖动,但在 Blender 中没有,请将其设为 0,然后交由 Unity 的 Anim. Compression 来减少关键帧。
最后还有两个实用的 Unity 习惯。名为 [email protected] 的文件会被自动归集:根据拆分动画页面的说明,“Unity 会自动导入全部四个文件,并将所有动画归集到文件名中不含 @ 符号的文件里”。因此,hero.fbx 加上 [email protected] 会生成一个带 Walk 剪辑的角色,而且你可以只重新导出单个剪辑而不改动网格。另外,请在 Animation 选项卡中为循环动画启用 Loop Time,因为 FBX 本身没有循环这一概念。
纹理与粉色材质
除非明确要求携带纹理,否则 Blender 的 FBX 导出器只会通过路径引用纹理。将 Path Mode 设为 Copy,之后 Embed Textures 开关便会出现,其说明为“将纹理嵌入 FBX 二进制文件(仅适用于 ‘Copy’ 路径模式!)”。此时,.fbx 文件中就会包含图像。在 Unity 中,Materials 选项卡默认将材质保留为子资源(“Use Embedded Materials”),并提供两个用于提取资源的按钮:Extract Textures 会将嵌入的图像写入文件夹,Extract Materials 则会将子资源转换为可编辑的 .mat 文件。请先提取纹理,再提取材质,这样提取出的材质才会指向提取出的纹理。提取完成后,“重新导入或修改原始资源不会影响已提取的材质”,这正是需要的行为:你可以重新导出网格无数次,而不会丢失在 Unity 端对材质所做的调整。
导入后通常只能得到基础颜色和少数几个插槽。FBX 没有一种能与 Blender Principled BSDF 一一对应的 PBR 标准,因此应做好在 Unity 中手动分配粗糙度、金属度和法线贴图的准备。Material Creation Mode 中的 “Import via MaterialDescription” 会读取嵌入 FBX 的材质描述,其结果通常比 Standard (Legacy) 模式更接近原始材质。
接下来是粉色材质。Unity 的错误着色器页面指出:“当对象的材质或着色器出现问题时,Unity 会使用默认错误着色器渲染该对象”,例如着色器无法编译或不受支持,并且“默认错误着色器是洋红色(亮粉色)”。对于导入资源,典型情况是:“如果项目使用通用渲染管线(URP),而对象使用内置渲染管线中的着色器,Unity 可能会使用默认错误着色器渲染该对象。”导入的 FBX 材质默认使用内置管线着色器,因此在 URP 或 HDRP 项目中会显示为粉色。缺失纹理不会使材质变粉,而只会让它显示为灰色或白色。
修复只需使用一个菜单。选中粉色材质,然后执行 Edit > Rendering > Materials > Convert Selected Materials to URP;或者按照转换器文档,打开 Window > Rendering > Render Pipeline Converter,选择 Built-in Render Pipeline to URP,勾选 Material Upgrade 并运行。唯一的限制是:“此转换器不支持使用自定义着色器的材质”,但导入的 FBX 材质通常不会使用自定义着色器。HDRP 的对应选项位于 Edit > Rendering > Materials 下。
平滑与法线
Blender 的 Smoothing 下拉菜单有四个选项,其中一个会破坏 Unity 的一项功能。Normals Only 会“仅导出法线,而不写入边或面的平滑数据”,手册还指出:“如果导入器支持自定义拆分法线,使用 Normals Only 通常最准确。”Face 会写入面平滑数据,Edge 会写入边平滑数据,Smoothing Groups 则会写入由共同平滑着色的面组成的组。Unity 在所有情况下都能正确导入法线(其 Normals 设置默认为 Import)。但 Unity 的 Model 选项卡在 Import BlendShapes 下发出警告:“导入混合形状法线要求 FBX 文件中包含平滑组。”如果使用 Normals Only 导出带形态键的面,导入后的变形目标就可能出现平坦或错误的着色。
对于 Unity,Face 是最稳妥的默认选项;如果还要将文件发送到 3ds Max 一类的工具,则可使用 Smoothing Groups。如果硬边来自 Smooth by Angle 修改器,请勾选 Apply Modifiers,否则这些硬边会消失。如果网格在 Blender 中看起来平滑,但在 Unity 中呈现明显的多边形切面,可先将 Unity 的 Normals 改为 Calculate,并将 Smoothness Source 改为 From Angle 进行快速检查,然后再修正导出设置。
症状、原因与解决方法
| Unity 中的症状 | 原因 | 解决方法 |
|---|---|---|
| 模型很小,或大了 100 倍 | Scale Factor 被修改、Convert Units 关闭,或 Blender Unit Scale 不是 1.0 且启用了 Apply Unit | Unity:Scale Factor 设为 1,启用 Convert Units。Blender:Unit Scale 设为 1.0,Scale 设为 1.00 |
| 尺寸正确,但缩放显示为 100,File Scale 显示为 0.01 | Apply Scalings 仍为 All Local | 将 Apply Scalings 改为 FBX Units Scale 或 FBX All,然后重新导入 |
| 根节点在 X 轴上旋转 -90(或 -89.98)度 | 轴向转换被存储为变换 | 在 Model 选项卡中勾选 Bake Axis Conversion |
| 角色面朝后方或侧面 | 在 Blender 中建模时朝向 +Y 或 +X | 在 Blender 中让角色朝向 -Y(前视图),并保持 Forward 为 -Z |
出现额外的 Head_end、Hand_end 骨骼 | Add Leaf Bones 仍处于启用状态 | 取消勾选 Add Leaf Bones |
| 层级中出现数百根骨骼、IK 目标和控件 | 整个控制绑定都被导出了 | 勾选 Only Deform Bones,并先将动画烘焙到变形骨骼 |
| Configure 旁出现叉号,没有 Avatar | 匹配到的必需骨骼少于 15 根,或骨骼无法识别 | 根据身体部位重命名骨骼,检查 15 根必需骨骼,并手动映射 |
| “Character not in T-Pose” | 静止姿态为 A 姿势或放松姿势 | 使用 Pose > Enforce T-Pose,或在 Blender 中修正静止姿态 |
| 动画正常播放,但角色不移动 | Generic 绑定的 Root Node 为 None,或位移关键帧设在骨架对象上 | 在 Rig 选项卡中设置 Root Node,并在根骨骼上设置位移关键帧 |
| 只导入了一个剪辑 | NLA Strips 和 All Actions 均关闭,或 Action 没有 fake user | 同时启用两者,每个剪辑使用一个 Action 或条带 |
| 四肢在原本使用 IK 的位置漂移或跳动 | 约束被导出为采样关键帧,且 Simplify 过高 | 在 Blender 中 Bake Action,并将 Simplify 设为 0 |
| 材质呈亮粉色 | URP 或 HDRP 项目中使用了内置管线着色器 | 将所选材质转换为 URP(或 HDRP) |
| 材质呈灰色,纹理缺失 | Path Mode 不是 Copy,且 Embed Textures 关闭 | 使用 Copy 并启用 Embed Textures,然后在 Unity 中执行 Extract Textures |
| 混合形状的着色平坦或错误 | Smoothing 设为 Normals Only | 将 Smoothing 设为 Face 或 Smoothing Groups |
| Blender 中平滑的位置出现明显切面 | Smooth by Angle 修改器未应用 | 勾选 Apply Modifiers |
| 团队中的所有人都遇到导入错误 | Assets 中包含 .blend 文件,但他们的电脑上没有 Blender | 导出 FBX,并将 .blend 文件移出 Assets |
10 步检查清单
先在 Blender 中对文件副本执行以下步骤,然后再到 Unity 中操作。
- 清理场景。 删除摄像机、灯光、参考图像以及所有不会随成品发布的内容。适当合并共用同一材质的网格,并确保每个需要变形的网格都已将骨架设为父级,且带有 Armature 修改器。
- 检查单位。 在 Scene Properties 的 Units 中设置:Unit System 为 Metric、Unit Scale 为 1.0、Length 为 Meters。查看角色的 Dimensions 面板(N):人形角色的高度应为 1.6 至 2.0 米。
- 应用变换。 选择网格,执行
Object > Apply > All Transforms。没有动画的骨架也要应用变换。对于带动画的骨架,不要应用,并确保其缩放已经显示为 1.0。 - 修正姿势和名称。 静置姿势应为 T-pose,并朝向 -Y(正视图方向)。骨骼名称应能体现身体部位,镜像骨骼使用
.L和.R,或Left和Right。不要自行添加_end骨骼。 - 准备剪辑。 每个剪辑使用一个带虚拟用户的 Action,或使用一个 NLA 片段。对于由 IK 或约束驱动的内容,执行
Object > Animation > Bake Action进行烘焙,并开启 Visual Keying。 - 导出。 执行
File > Export > FBX (.fbx)。开启 Selected Objects。Object Types 选择 Armature 和 Mesh。Scale 设为 1.00,Apply Scalings 设为 FBX Units Scale,Forward 设为 -Z,Up 设为 Y,开启 Apply Unit 和 Use Space Transform,关闭 Apply Transform。Smoothing 设为 Face,开启 Apply Modifiers。控制绑定应开启 Only Deform Bones,并关闭 Add Leaf Bones。开启 Bake Animation,同时开启 Key All Bones、NLA Strips、All Actions 和 Force Start/End Keying;Sampling Rate 设为 1.0,Simplify 设为 1.0。Path Mode 设为 Copy,并开启 Embed Textures。将这些设置保存为操作器预设(面板顶部的 +)。 - 导入。 将 .fbx 放入 Assets。打开 Model 选项卡:Scale Factor 设为 1,开启 Convert Units 和 Bake Axis Conversion;如果模型带有形态键,则开启 Import BlendShapes。点击 Apply。
- 绑定。 打开 Rig 选项卡:双足角色选择 Humanoid,其他角色选择 Generic。Avatar Definition 选择 Create From This Model。点击 Configure,确认骨骼显示为绿色,且没有 T-pose 提示。对于 Generic,如果剪辑需要移动角色,请设置 Root Node。点击 Apply。
- 动画。 打开 Animation 选项卡:确认每个 Action 对应一个剪辑。循环动画开启 Loop Time。待机动画开启 Root Transform Position (XZ) 的 Bake Into Pose。点击 Apply。
- 材质。 打开 Materials 选项卡:先将纹理解压到 Textures 文件夹,再将材质解压到 Materials 文件夹。在 URP 或 HDRP 项目中,选择解压出的材质并执行
Edit > Rendering > Materials > Convert Selected Materials to URP。将预制体拖入场景,对照 Blender 检查缩放、朝向和着色效果。
一键操作方案
如果你不想记住第 6 步,Cinevva Rig 插件提供了一张带 Unity 预设的导出卡片,可准确应用上述配置:FBX、Forward -Z、Up Y、使用 FBX All 应用单位缩放、不添加叶骨骼、Face 平滑、嵌入纹理,并将纹理限制在 2048 px。按下 Export 前,它的大小分析功能会将预估文件体积分成几何体、纹理、动画和形态键几部分,让你能看出 60 MB 究竟来自三张 4K 纹理,而不是网格。与 Blender 直接导出 GLB 相比,这些预设在四个真实模型上分别将文件缩小了 68%、89%、92% 和 98%,其中几乎全部收益都来自纹理尺寸限制和重新编码。导出完全在本地运行,不需要密钥、账户或网络。插件的付费部分是自动绑定:发布价一次性购买 $29,在一次性下载约 2.4 GB 的引擎后,可不限次数地进行本地绑定;支持 Blender 4.2 及更高版本,并包含 260 个 CC0 动画剪辑,可在 Blender 内重定向到绑定上,之后再以上述 Action 的形式导出。
用于解决 FBX 往返流程问题的成熟付费方案是 Mesh Online 推出的 Better FBX Importer & Exporter,在 Superhive 上销量超过 12,800。它基于 Autodesk 官方 FBX SDK 从零实现。根据产品页面,其“兼容所有 FBX 版本,从 ASCII 到二进制,从 FBX 5.3 到 FBX 2020”,导出结果“已在 Unity Engine 2021、Unreal Engine 4/5 和 Godot Engine v4.1.1 中验证”。它最突出的两项功能是:导入时自动调整骨骼朝向,可修正 Blender 导入器留下的骨轴扭转;以及“Optimize For Game Engine”导出,可生成具有“单位缩放和零旋转”的骨架。如果你经常导入其他美术人员制作的 FBX,或需要在 Maya、3ds Max 之间往返处理,它第一周就能值回票价。如果你只是将自己的 Blender 作品导出到 Unity,使用本页设置即可免费获得相同结果。
常见问题
如何从 Blender 导出到 Unity?
导出 FBX,而不是 .blend。执行 File > Export > FBX (.fbx),开启 Selected Objects,将 Scale 设为 1.00,Apply Scalings 设为 FBX Units Scale,Forward 设为 -Z,Up 设为 Y,关闭 Add Leaf Bones,Smoothing 设为 Face,Path Mode 设为 Copy,并开启 Embed Textures。在 Unity 的 Model 选项卡中勾选 Convert Units 和 Bake Axis Conversion,然后从 Materials 选项卡中解压纹理和材质。
为什么我的 Blender 模型在 Unity 中缩放为 0.01 或 100?
FBX 以厘米计数,因此 Blender 导出器会将以米为单位的场景乘以 100。使用默认的 Apply Scalings:All Local 时,这个 100 会落到每个对象的变换上,而 Unity 的 Convert Units 会通过 0.01 的文件缩放将其抵消。改用 FBX Units Scale 或 FBX All,这个系数就会写入文件头,让每个变换都保持为 1。如果模型大了 100 倍,说明 Convert Units 已关闭,或 Unity 中的 Scale Factor 被修改过。
为什么我的 Blender FBX 在 Unity 中的 X 轴旋转为 -90?
Blender 使用 Z 轴向上,而 Unity 使用 Y 轴向上。导出器会将二者之间的 90 度转换保存为根对象的旋转,因此 Unity 会显示为 -90(通常是 -89.98)。在 Unity 的 Model 选项卡中勾选 Bake Axis Conversion,旋转就会烘焙到顶点中,根节点的旋转将显示为零。不要对带绑定的模型使用导出器中的 Apply Transform,因为它自身的说明明确指出,该功能对骨架和动画存在问题。
如何将动画从 Blender 导出到 Unity?
每个剪辑创建一个 Action(或一个 NLA 片段),使用 Bake Action 烘焙所有由 IK 或约束驱动的运动,然后在导出时开启 Bake Animation,并勾选 Key All Bones、NLA Strips、All Actions 和 Force Start/End Keying。每个 Action 都会以其在 Blender 中的名称显示为 Unity Animation 选项卡中的剪辑。对于 Generic 绑定,如果需要根运动,请在 Rig 选项卡中设置 Root Node;对于循环动画,请开启 Loop Time。
Unity 应该使用 FBX 还是 glTF?
带绑定或动画的内容使用 FBX。Unity 原生支持导入 FBX,而 glTF 需要 com.unity.cloud.gltfast 包。该包仅完整支持旧版 Animation 系统的动画导入,对 Mecanim 的支持仍“需要进一步完善”,并且 Unity 无法读取 WebP 纹理。对于静态道具,以及运行时从服务器加载的模型,glTF 是不错的选择。
为什么从 Blender 导入后,我的材质在 Unity 中变成了粉色?
粉色表示 Unity 的错误着色器。对于导入内容,这几乎总是因为在 URP 或 HDRP 项目中使用了 Built-in Render Pipeline 着色器。选择材质并执行 Edit > Rendering > Materials > Convert Selected Materials to URP,或使用 Window > Rendering > Render Pipeline Converter。纹理缺失会使材质变成灰色,而不是粉色:对此,请使用 Path Mode Copy 并开启 Embed Textures 进行导出,然后在 Unity 中点击 Extract Textures。
为什么 Unity 无法根据我的 Blender 绑定创建 Humanoid Avatar?
Unity 至少需要 15 根可识别的必要骨骼和一个 T 姿势。Configure 旁边出现叉号表示映射失败;Mapping 选项卡中的红色骨骼是无法匹配的骨骼;“Character not in T-Pose”表示静止姿势不正确。请根据身体部位命名骨骼(Mixamo 的命名始终可以映射),取消勾选 Add Leaf Bones,避免 _end 骨骼造成干扰;手动将所有红色骨骼拖到正确位置,并使用 Pose > Enforce T-Pose。
相关内容
- Blender 到 Unreal 导出检查清单:适用于 Unreal 的同类流程,其中单位和骨骼轴向正好相反
- Blender 到 Godot 导出检查清单:glTF 是 Godot 4 的原生工作流,相关设置也有所不同
- 自动绑定的工作原理:在上述步骤发挥作用之前,自动绑定工具对网格有哪些要求
- 如何为 Web 优化 GLB 文件:面向浏览器使用 Draco、Meshopt 和 KTX2;在这种场景中,glTF 才是合适的格式
- GLB 查看器:在为 Unity 重新导出之前,检查 glTF 的场景图、骨骼和动画片段
- Cinevva Blender 绑定插件:在一个插件中完成骨骼绑定,并获得 260 个 CC0 动画片段和 Unity 导出预设