3D试玩游戏资产规范与处理
公用存储 & 账号 & 文档
- 共用存储:
- 成稿工程(过往工程):
- 过往音效资源:`
- 过往特效资源和素材:
- Cocos 账号:
- 部分资产查找表:
- 特定公司项目参考:
- 项目人员排期表:
- 试玩广告产品手册:
资产处理规范
文件夹结构与命名规范 (Naming & File)
-
🔴 不使用中文、空格或特殊字符:仅使用
A-Z,a-z,0-9,_,-- 拼音:首字母要大写:DaXie
- 英文:单词首字母要大写:AttackAnimation
-
🔴 见名知意:拒绝
img_001,test_new_final_v2这类命名。 -
🔴 数字编号补零:使用
Hero_001而非Hero_1,保证排序正确
assets/
├── Resources/ # ⚠️仅存放需要动态加载(cc.resources.load)的资源
├── Scripts/ # 全局框架代码、管理器、工具类
│ ├── Game/
│ ├── Framework/
│ ├── UI/
│ └── ....
│
├── Res/ # 美术资产目录
│ ├─── Modles/
│ │ ├── Materials/
│ │ ├─── Meshs/ # 🎨美术资源总目录🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
│ │ │ ├── Characters/ # 🔵角色资产目录🔵
│ │ │ │ ├── GeneralCharacterAnimation/
│ │ │ │ ├── Hero_001/
│ │ │ │ │ ├── Mesh/
│ │ │ │ │ ├── Textures/
│ │ │ │ │ ├── Animations/
│ │ │ │ │ ├── Prefabs/
│ │ │ │ │ └── Materials/
│ │ │ │ └── Hero_003/
│ │ │ ├── Environments/ # 🟠场景美术目录🟠
│ │ │ │ ├── GeneralEnvironmentsTextures/
│ │ │ │ │ └── xxx.webp
│ │ │ │ ├── Trees/
│ │ │ │ │ ├── GeneralTreesTextures/
│ │ │ │ │ ├── Tree_001.glb
│ │ │ │ │ ├── Tree_001.mtl
│ │ │ │ │ ├── Tree_001.webp
│ │ │ │ │ ├── Tree_002.glb
│ │ │ │ │ ├── Tree_002.mtl
│ │ │ │ │ └── Tree_002.webp
│ │ │ │ ├── HDRI.glb
│ │ │ │ ├── HDRI.mtl
│ │ │ │ └── HDRI.webp
│ │ │ └── Prefabs/ # 模型预制体
│ ├── Shaders/ # Shader 目录 Shader 全放这
│ │ └── xxx.effect/
│ ├── VFX/ # 💥特效目录💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥💥
│ │ ├── GeneralVisualEffectsTextures/
│ │ ├── Attack/ # 攻击特效文件夹
│ │ │ ├── Mesh/ # 攻击特效模型
│ │ │ ├── Textures/ # 攻击特效贴图
│ │ │ └── Prefabs/ # 攻击特效预制体
│ │ ├── hit/ # 受击特效文件夹
│ │ │ ├── Mesh/ # 受击特效模型
│ │ │ ├── Textures/ # 受击特效贴图
│ │ │ └── Prefabs/ # 受击特效预制体
│ ├── AnimationClips/ # 动画剪辑目录、动画图等
│ │ ├── xx.anim
│ │ └── xx2.anim
│ ├── Audio/ # 📢 音频资源📢📢📢📢📢📢📢📢📢📢📢📢📢📢📢📢📢📢
│ │ ├── BGM/
│ │ ├── SFX/
│ │ └── 其他/
│ ├── UI/ # ⚪️ UI 图集、图标、字体⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️
│ │ ├── Atlas/ # 自动图集 / 散图目录
│ │ ├── Icons/
│ │ ├── Icons/
│ │ └── Prefabs/
│ ├── Terrains/ # 地形目录
│ │ ├── GeneralTerrainsTextures/
│ │ └── XX_001.terrain
├── Scenes/ # ⛰️ 场景文件目录 (.scene)⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️⛰️
│ ├── Login.scene
│ ├── MainGame.scene
│ └── Test.scene # 测试/调试场景
│
└── Docs/ # 策划文档、参考图、协议文档(不参与构建)
- ⚠️ 什么【不应该】放进 resources
- resources 目录是一个特殊且昂贵的文件夹。只有当你无法通过编辑器拖拽建立静态引用,必须在代码运行时通过 resources.load() / loadDir() 等 API 获取资源时,才应该将资源放入此目录。
- 配置与数据文件
- JSON / CSV / Excel 导出的配置表:关卡配置、怪物属性、道具表、多语言文本等。
- 二进制数据:自定义格式的存档文件、加密数据包。
- 原因:这些数据通常在运行时根据逻辑按需读取,且无法在编辑器中预知具体加载哪一份。
- 运行时才能确定路径的资源
- 角色换装/皮肤系统:
resources.load(\skins/ $ {skinId}_body, ...)` - 动态头像/昵称:从服务器获取 ID 后加载对应头像
- 多语言切换:根据当前语言代码加载对应的文本/语音包
- 关卡/章节内容:根据玩家进度动态决定加载哪个关卡预制体
- 角色换装/皮肤系统:
- 按需创建的 UI
- 动态列表项:背包格子、排行榜条目、聊天记录气泡等(通过预制体 + 代码批量 instantiate)
- 弹窗/对话框:不在默认场景中,由用户操作触发才加载显示的界面
- Toast / Tips 提示:全局通用的轻量级反馈组件
- 部分音频资源
- 大量音效:如不同武器的打击音、不同怪物的叫声,数量多且不确定何时播放
- 动态 BGM:根据场景/情绪实时切换的背景音乐
- ⚠️ 注意:常驻 BGM 和核心 UI 音效应放在场景或 Bundle 中静态引用,不要全塞进 resources
- 配置与数据文件
- resources 目录是一个特殊且昂贵的文件夹。只有当你无法通过编辑器拖拽建立静态引用,必须在代码运行时通过 resources.load() / loadDir() 等 API 获取资源时,才应该将资源放入此目录。
| ❌ 不应放入 | ✅ 正确做法 | 原因 |
|---|---|---|
| 场景文件 (.scene) | 用 Bundle 或 director.loadScene |
场景应独立管理,resources 不支持直接加载场景 |
| 所有贴图/模型/动画 |
按模块放入对应 Bundle | resources 内资源全部参与构建,无法按需剔除 |
| 常驻 UI 预制体 | 直接在场景中拖拽引用 | 静态引用零开销,无需动态加载 |
| Shader / Effect | 放在 Bundle 或全局目录 | 材质系统有自己的管理机制 |
| 字体文件 (TTF/BMFont) | 放 Bundle 或静态引用 | 字体通常体积大,应随所属模块加载 |
| 整个美术/音频文件夹 | 拆分到各功能 Bundle | 会导致包体爆炸、启动变慢 |
- 🟢 Cocos 文件夹结构工程模版
- cocos_Template_3.8.3_V1
cocos_Template_3.8.3_V1.zip
- cocos_Template_3.8.3_V1
变换与轴向 (Transform & Pivot)
-
🔴 缩放是否已应用,即缩放值必须为
(1, 1, 1)? -
🔴 旋转是否已归零?
-
🔴 轴心点位置是否正确?(例如:角色/树木的 Pivot 必须在底部Z=0,道具在中心)。
-
🔴 模型的朝向是否正确?(Cocos
Y轴朝上,Z朝前,X朝右)。
网格与拓扑 (Mesh & Geometry)
-
🔴 是否存在 N-gon(多于4条边的多边形)?(引擎通常只认三角面或四边面)。
-
🔴 是否存在孤立顶点?
-
🔵 未融合的重合点?
-
🟠 面数/顶点数是否超过了该级别资产的上限?(角色模型 < 3000面,小道具<1000面)。
- 场景道具:通常 < 1000 面 大小:< 100kb
- 角色模型:通常 < 3000 面 大小:< 300kb
-
🟠 是否应用了修改器?
-
🔵 合并网格:同一材质的部件合并,一个模型尽量只有 1 个 Mesh。每多一个 Mesh = 多一个 DrawCall。
UV与法线 (UV & Normals)
-
🔴 UV是否存在重叠 ?(特殊UV,如平铺材质允许重叠)。
-
🔴 UV是否超出了 0-1 空间(第一象限)?
-
🔴 法线是否一致?(是否存在反转法线 / 内部面)。
-
🔵 硬边/软边(Smooth Groups)设置是否合理?(通常UV断开的地方,法线也必须断开/硬化)。
材质与层级 (Material & Hierarchy)
-
🔵 一个模型网格(Mesh)上赋予的材质球数量是否过多?(通常建议1个,最多不超过3个,否则会增加DrawCall)。
-
🔵 场景层级是否干净?(不能有隐藏的辅助线、多余的灯光、未删除的测试几何体)。
动作与骨骼(Animation & Skeleton)
-
🔴动画处理:
- 帧数率 30fps
- 总帧数 < 60帧
- 原模型:导出拥有模型、骨骼、蒙皮信息的 GLB 文件;
- 模型动画:不带蒙皮的只包含动画的 GLB 文件。
-
骨骼数量:
- 尽量只保留基础的人体骨骼,骨骼数量不要太多一般会≤60 根骨骼。骨骼数量过多动画体积会越大。
纹理贴图(Textures)
-
视项目情况(模型在画面内的占比)分配模型贴图大小,一般小于等于
256×256。 -
格式:Webp>jpg>png (不能用 tga、psd、exr 等格式大图)
-
尺寸:
64×63≈4kb;128×128≈12kb;256×256≈16kb;512×512≈30kb(尺寸需要为,2次幂) -
压缩:
- png :使用 tinypng 网站压缩
- webp :使用 ImageForge.exe 程序压缩
- jpg:使用 ImageForge.exe 程序压缩
ImageForge.exe
-
通道打包(一般只用一张Diffuse):将 Metallic(R)、Roughness(G)、AO(B) 合并为一张 MRAO 贴图,节省 2 张纹理采样。
模型导出 & 格式 (ExportMesh & MeshFormat)
格式:GLB
要求:删除材质,保留材质插槽。
比例:
- 甲方如有角色资产,则以甲方角色做参考。
- 没有角色资产以 cocos 一个立方体为1m为参考
- blender 默认立方体 缩放到
0.5,0.5,0.5 - Maya 生成立方体 缩放到
100,100,100
- blender 默认立方体 缩放到
其他 (Other)
🔴cocos 场景节点后边不要有带 + 标记的节点
-
带 + 号的节点表示是预制体未识别的节点,导入模型后放到场景中,默认模型是模型预制体 节点是绿色的,复制节点下的模型节点是白色带 + 号。带加号就是为解析的预制体节点。
- 解决方法:
- 移除预制体关联,
- 把父节点拉入资源管理器把它变成真的 cocos 预制体
- 解决方法:
🔴** cocos 引擎模型压缩与图片压缩**
- cocos 自带压缩功能,可在资产对应的属性检查器中开启。
🟢 AI 辅助场景搭建
- 远景模型可用 ai 生成,生成后可用maya和3dmax减面,平面光照与远景看都过得去(无法手工更改贴图和模型,布线糟糕,如果客户需要更改 AI 模型部分效果将无法修改,只能照着模型手工重做)
🟢 cocos 版本统一 3.8.3(暂定)
🔵 cocos 3d场景美术包体通常会控制在 3mb 以内
- 通常使用
super-html打包查看,可在应用商店下载。
🟢 **常用材质 builtin-standard、builtin-unlit、builtin-toon **
-
此数值整体提高可以提亮材质,单个提高可以提亮单独颜

-
双面显示方式:剔除模式改为NONE,剔除背面前面可见,剔除前面背面可见。

-
打开材质实例,减少 Drawcall 数量。带骨骼动画的模型不要打开。

🟢 不使用默认 skybox 的 HDRI图,压缩包体
- 关闭 skybox envmap设置为空,可用mesh代替

⚠️ 功能剪裁
- 通常会剪裁项目不需要的功能,压缩包体。视项目实际情况而定,下图仅供参考。

资产处理技巧
🟢 虚幻引擎资产导入导出技巧(FBX)
-
模型导入示例↓↓↓↓:
- 情境一:甲方资产含
xxx.uproject文件,右键该文件点击Open

- 情境二:甲方资产不含
xxx.uproject文件,含Content文件夹,把Content文件夹下的文件夹放到自己建立的工程,下的Content里。

- 情境一:甲方资产含
-
模型导出示例↓↓↓↓:


🟢 Unity 资产导入导出技巧(FBX)
-
资产导入示例↓↓↓↓:
.unitypackage直接拖进项目管理器- 只有
Asset文件夹也直接拖入项目管理器
-
资产导出示例↓↓↓↓:
- 情境一:unity 资产为
.asset文件:开启自带插件FBX Exporter解决工程报错(删除所有脚本)用插件导出




- 情境二:unity 资产为
.fbx.webp等文件,直接定位到资源管理器复制即可。
- 情境一:unity 资产为
🔴 使用 Blender 将 FBX 导出为 GLB
-
资产导入示例↓↓↓↓:
- 情境一:Maya、3dsMax 的 FBX 导入 blender 显示异常。安装 Better FBX 插件导入


- 情境一:Maya、3dsMax 的 FBX 导入 blender 显示异常。安装 Better FBX 插件导入
-
资产导出示例↓↓↓↓:
- 开启 压缩选项;保留材质插槽;应用修改器



- 角色基础模型:开启蒙皮&形态键。纯动画:关闭形态键和蒙皮,删除场景角色mesh

- 开启 压缩选项;保留材质插槽;应用修改器
🟢 使用 Blender 进行模型自动减面
- 为模型添加精简修改器。

🟢 项目资源占用查看技巧
- 使用可视化工具查看:
SpaceSniffer.exe


🟢 通过 Mixamo 获取免费可商用动画资产
🟢 动画重定向(Maya)
- 可以用Maya的控制Humen IK 把其他骨骼的的动画映射到甲方的骨骼模型资产上

Git_协作流程
🟢 远程仓库选择
| 平台 | 链接 | 优点 | 缺点 |
|---|---|---|---|
| GitHub | https://github.com/ | 生态好 | 国内速度有时不稳定(需要科学上网,都是英文) |
| Gitee | https://gitee.com/ | 国内速度快 | 免费版私有仓库限制多(上限5名成成员合作) |
🔴 Git_下载 & 安装
🔴 日常工作流程
graph LR
A[开始协作] --> B{是否拉取主分支最新代码?}
B -->|否| C[执行 git pull origin main]
B -->|是| D[创建功能分支]
C --> D
D --> E[进行开发修改]
E --> F{是否完成开发?}
F -->|否| E
F -->|是| G[提交修改到功能分支]
G --> H[对比主分支差异]
H --> I{是否有冲突?}
I -->|是| J[解决冲突]
I -->|否| K[合并到主分支]
J --> L{冲突文件类型?}
L -->|文本文件| M[手动编辑解决]
L -->|Cocos资源文件| N[用编辑器重新操作]
L -->|.meta文件| O[保留当前分支版本]
M --> P[标记已解决]
N --> P
O --> P
P --> K
K --> Q[在Cocos编辑器验证]
Q --> R{验证通过?}
R -->|是| S[推送合并结果]
R -->|否| T[修复问题并重新验证]
T --> Q
S --> U[完成协作]
classDef decision fill:#f9f,stroke:#333,stroke-width:1px;
classDef action fill:#e6f7ff,stroke:#1890ff;
classDef warning fill:#fff7e6,stroke:#faad14;
class B,I,L,R decision;
class C,D,E,G,H,J,M,N,O,P,Q,T,S,U action;
class J,T warning;
🟢 忽略( .gitignore)文件配置
-
与官方版本略有不同:因为常用 super-html 插件打包。如果需要上传 super-html 插件到远程仓库就要把
node_modules/注释掉
🔴 Cocos 资源与场景协作规范(防冲突指南)
-
场景分工
- 核心场景:指定负责人人负责维护,其他人不直接修改。要做使用场景测试就复制一份主场景。
- 避免多人同时编辑同一场景
-
预制体化
- 可复用的 UI 模块、角色、怪物、特效,制作成 Prefab。
- 修改时,优先在 Prefab 内部修改,减少在 Scene 中的直接编辑。
-
及时沟通
- 修改公共场景(核心场景)或核心预制体前,通知相关人员。
-
版本锁定
- 禁止使用不同版本打开项目。
-
提交信息
- 简短描述-精炼总结说清楚做了什么
🟢 Git 图形化客户端
| 客户端名称 | 工具形态 | 链接 | 核心优势与适合人群 | 使用教程 |
|---|---|---|---|---|
| 🐢 TortoiseGit(推荐) | 资源管理器右键 | https://tortoisegit.org/ | 管理非代码资源(图片/音频/Cocos场景)最直观。 | https://blog.csdn.net/qq_19688207/article/details/143226172 |
| 🌳 SourceTree | 独立软件窗口 | https://www.sourcetreeapp.com/ | 功能大而全,有中文,操作复杂。 | |
| 🐱 GitHub Desktop | 独立软件窗口 | https://github.com/apps/desktop | 极简(功能有限)。没有复杂操作,英文界面 | |
| 💻 VS Code 内置 | 编辑器侧边栏 | 适合边写代码边提交的程序员。 |
评论区