摘要:本文聚焦 Unity 工业化开发流程,覆盖资产导入、Prefab 结构、场景组织、物理层矩阵、碰撞体、材质规范、版本协作与提交流程。适用范围:中大型独立游戏、长期维护项目、多人协作项目。
核心哲学:一切皆预制体(Everything is a Prefab);数据与逻辑分离。
1. 资产导入与 Prefab 规范
这是工业化流程的基石。在大型项目中,美术和程序并行工作,错误导入习惯会导致合并冲突与逻辑丢失。1.1 错误做法(新手常见)
直接把.fbx 拖入场景后,在该实例上挂脚本、改材质、加碰撞体,或在 FBX Import Settings 中直接勾选 Generate Colliders。
常见后果:
- 逻辑丢失:美术覆盖 FBX 后,层级或组件引用可能被重置,脚本配置丢失。
- 重复劳动:同一物体跨多个场景重复手动配置,后续修改成本极高。
- 版本冲突:多人同时改同一个 Scene 文件,难以合并。
1.2 工业化做法:容器模式与逻辑解耦
核心原则:FBX 是原材料,Prefab 是成品。A. 模型导入标准(Import Settings)
Scale Factor:导入后缩放必须正确,不允许依赖 Transform 手调 100/0.01。Materials:使用Do Not Import Materials或统一提取材质,不使用 FBX 内嵌材质。Rig:静态物体用None,道具用Generic,角色用Humanoid。
B. 容器模式结构(Container Pattern)
推荐结构如下:Visual 子节点,根节点逻辑与物理不受影响。
C. 变体与嵌套(Variants & Nested Prefabs)
- 基类预制体:
Scrap_Base(包含通用逻辑组件)。 - 变体预制体:
Scrap_Engine、Scrap_Bottle(只替换模型与局部参数)。 - 价值:修复基类逻辑后,全部变体自动继承。
2. 场景结构管理
标准关卡层级示例:- 系统级物体使用
_前缀,便于置顶排序。 - 纯组织用父节点坐标保持
(0,0,0)。
3. 物理层与碰撞矩阵
不要把所有对象都放在Default。
3.1 Layer 规划建议
| Layer ID | Name | 用途 |
|---|---|---|
| 6 | Terrain/Ground | 地面与落脚点检测 |
| 7 | Wall | 墙体遮挡、阻挡 |
| 8 | Interactable | 交互对象射线检测 |
| 9 | Player | 玩家本体 |
| 10 | PlayerHand | 手持物体 |
| 11 | Enemy | 敌人 |
| 12 | Debris | 视觉碎片 |
| 13 | Trigger | 触发器 |
3.2 Collision Matrix 建议
在Edit > Project Settings > Physics > Layer Collision Matrix 中精简碰撞关系:
- 关闭
Player vs Player(无互推需求时)。 - 关闭
Debris vs Debris。 - 关闭
Debris vs Player。 - 视玩法关闭
Interactable vs Player。
4. 碰撞体制作流程
4.1 静态场景
- 视觉网格与碰撞网格分离:
Visual_Mesh:高模,仅渲染。Collision_Mesh:低模,仅碰撞。
- 避免高面数 MeshCollider 直接用于整场景。
4.2 动态道具
- 优先使用 Primitive Collider(Box/Sphere/Capsule)。
- 复杂形体使用复合碰撞体(Compound Colliders),避免单个 MeshCollider。
5. 材质与贴图规范
- 优先复用 Shader,不因颜色差异复制 Shader。
- 使用材质变体或
MaterialPropertyBlock控制个体差异。 - 贴图建议采用打包图(如 MOS:
Metallic=R, Occlusion=G, Smoothness=B/A)减少采样与内存。
6. 版本控制协作规范
场景文件(.unity)难以合并,必须避免多人同时修改同一 Scene。
推荐多场景工作流:
Level_Layout.unity(美术)Level_Logic.unity(程序)Level_Audio.unity(音频)
7. 第三方资产包管理规范 (Third-Party Asset Management)
❌ 错误做法:直接导入 Asset Store 包,任由它在
Assets 根目录下生成 SuperSciFiKit、PolygonHorror 等文件夹。
后果:项目目录乱成一锅粥;由于包含大量 4K 贴图和 Demo 场景,工程体积爆炸;想要修改某个脚本时,下次更新插件又被覆盖了。
✅ 工业化做法 (隔离与清洗):
A. 目录隔离 (The Quarantine Zone)
建立一个专门的文件夹(如Assets/_ThirdParty 或 Assets/Vendor),所有购买的插件、素材包必须放在这里面。
- 保持原样:在这个文件夹内,尽量保持插件原本的目录结构,方便未来更新。
B. 提取与清洗工作流 (Extract & Clean)
- 绝不直接使用第三方包里的 Prefab。
- 筛选 (Filter):导入包时,取消勾选
Documentation、Demos、Examples文件夹。这些只会拖慢你的工程。 - 提取 (Extract):
- 如果你看中了包里的一个“油桶”模型,不要直接引用。
- 复制那个
.fbx和对应的贴图,粘贴到你自己的Assets/Art/Models/Props文件夹中。 - 按照本文第 1 章的规范,为这个复制出来的模型创建你自己的 Prefab。
- 理由:这样你可以随意修改材质、碰撞体,而不必担心更新资产包时被重置。
C. 代码隔离 (Assembly Definition)
对于包含大量脚本的插件(如A* Pathfinding、Rewired):
- 在该插件的根目录下创建一个 Assembly Definition (
.asmdef) 文件。 - 作用:这会把插件编译成一个独立的 DLL。当你修改自己的游戏逻辑代码时,Unity 不需要重新编译这些巨大的插件代码,编译速度能快 50% 以上。
D. 修改原则 (Modification Rule)
- 原则:永远不要修改第三方脚本的源代码。
- 如果必须改:
- 优先尝试继承 (Inheritance) 或扩展方法 (Extension Methods)。
- 如果非改不可,必须在修改处加上注释
// MODIFIED BY [YOUR NAME],并把修改过的脚本复制一份备份。否则下次插件更新,你的修改就全没了。
8. 资产引用强制隔离与自动化提取 (Enforcement & Automation)
针对“资产包文件夹混乱”和“手动复制麻烦”的痛点,我们需要两套脚本:一套负责拦截,一套负责智能搬运。A. 引用阻断器 (The Reference Barrier)
将此脚本放入Assets/Editor 文件夹。当你保存 Prefab 时,它会自动检查依赖。
B. 智能提取器 (Smart Asset Extractor)
这是一个“一键搬家”工具。用法:在 Project 窗口选中
_ThirdParty 里的一个 FBX 模型 -> 右键 -> Industrial Tools -> Smart Extract to Art。
功能:自动找到该模型用到的材质和贴图,把它们全部移动到 Assets/Art/Imported/[模型名] 文件夹,并保持引用不断裂。
9. 提交前检查清单(Pre-Commit)
- 无
Missing Prefab/ 丢失引用。 - 场景根目录无测试垃圾对象。
- 灯光烘焙状态正确(或明确使用 Realtime)。
- 静态环境对象正确标记
Static(关系到 Occlusion Culling / NavMesh)。
10. 标准 Scrap 预制体范例
- 逻辑与视觉可独立迭代。
- 批量变体继承统一行为。
- 跨团队协作时引用与合并风险最小化。