资产协作避坑指南¶
备注
最后更新:2025年9月7日
引言¶
在多人协作的开发环境中,资产管理不当是导致冲突、性能问题和返工的主要原因。本指南将重点关注 Unity/Unreal Engine 等现代游戏引擎中的协作流程。
核心原则¶
谁负责? 每个资产或模块都应有明确的负责人。对于一个角色,模型师负责模型和UV,贴图师负责材质和贴图,动画师负责动画。
先沟通,后修改: 在修改不属于你的资产前,务必与负责人沟通。
常见问题与解决方案¶
场景与预制体 (Scene & Prefab) 协作¶
问题点:
场景文件冲突: 多人同时编辑同一个场景文件 (
.unity,.umap) 是最常见的冲突来源。预制体耦合: 巨大的、无所不包的“上帝预制体” (God Prefab) 极难维护和协作。
解决方案:
场景拆分: 将大型关卡按区域或功能拆分成多个小场景,使用 场景加载/卸载 (Additive Loading) 技术进行组合。这样不同的人可以负责不同的小场景。
预制体模块化:
单一职责: 每个预制体只做一件事。例如,一个角色预制体,一个道具预制体,而不是一个包含了角色、道具和环境的巨大预制体。
嵌套预制体 (Nested Prefabs): 善用预制体嵌套来组合复杂对象。修改最底层的预制体可以自动更新所有引用它的地方。
变体 (Variants): 为预制体创建变体来处理差异化需求,而不是复制和修改。
模型与贴图协作¶
问题点:
枢轴点与缩放不统一: 导入的模型枢轴点 (Pivot) 位置错误,或缩放比例 (Scale) 不是 1,导致在引擎中难以对齐和使用。
材质丢失或错乱: 导入模型时,材质信息丢失,或者需要手动重新指定贴图。
贴图格式与分辨率混乱: 项目中存在
.png,.tga,.jpg等多种格式,且分辨率从 512 到 4k 不等,管理混乱且影响性能。
解决方案:
导出前校准:
冻结变换: 在 DCC 软件 (Blender, Maya) 中,导出前必须 应用所有变换 (Apply All Transforms),确保位移、旋转为0,缩放为1。
对齐坐标系: 确保 DCC 的坐标轴与引擎的坐标轴匹配 (例如,Blender 导出到 Unity 需要设置 Z-Up, Y-Forward)。
命名匹配: 遵循命名约定,例如模型名为
SKM_Goblin,其材质也应命名为MAT_Goblin,引擎会自动匹配。
统一贴图标准:
格式: 规定项目使用的主要贴图格式。例如,UI 使用
.png,带 Alpha 通道的贴图使用.tga,普通颜色贴图使用压缩格式。分辨率: 制定不同类型资产的贴图分辨率上限,如角色为 2k,道具为 1k。
通道打包 (Channel Packing): 将多张灰度图(如金属度、粗糙度、AO)打包到一个贴图的 R, G, B, A 通道中,以节省内存和采样器。
版本控制中的二进制文件¶
问题点:
二进制文件无法合并: 引擎中的场景、预制体、材质等都是二进制文件,Git 无法像合并代码一样自动合并它们的冲突。
仓库过大: 大尺寸的贴图、模型、音频文件会迅速撑大 Git 仓库,导致克隆和拉取速度变慢。
解决方案:
使用 Git LFS (Large File Storage):
配置: 为大文件类型(如
.fbx,.png,.psd,.wav)启用 Git LFS 跟踪。工作流: LFS 会将大文件存储在专门的服务器上,而在 Git 仓库中只保留一个轻量的指针文件。
文件锁定 (File Locking):
对于无法合并的二进制文件(尤其是场景和预制体),使用 文件锁定 机制。
Perforce 等版本控制系统原生支持文件锁定。对于 Git/Git LFS,一些团队会通过团队沟通或第三方工具来实现“签出/签入”(Check-out/Check-in) 的逻辑。
注意
在修改场景或核心预制体等高风险资产前,务必在团队频道中声明,告知其他人“我正在修改 XXX,请暂时不要动它”,并尽快完成提交。这是一种手动的“逻辑锁定”。
关于¶
- 作者:
Refactor团队
- 主要贡献者:
邱文涛
- 特别鸣谢:
所有走在前列、为后辈探路的游戏开发行业的师兄师姐们。