包体分析

自动关联目录:包体分析

1. 定位

包体是"发布前必须过的硬指标":商店有大小限制,下载转化率随体积下降。

一句话定位:包体分析和内存分析是同一套思路——先分类别找最大项,不要只看总量。

2. 工具

工具用途
SizeMap(编辑器)单个资产的依赖总大小,找"谁最大"最快
UnrealPak.exe -List精确列出每个 pak 里的资产
Asset Audit(编辑器)按类型统计、对比平台
Unreal PakViewer可视化查看 pak 内容
CI 上的包体监控防止悄悄变大(见下)
项目实测UE性能优化工具 的包体章节

3. 包体的构成与优化优先级

类别典型占比优化手段
纹理通常最大分辨率、压缩格式(ASTC/ETC2)、mip
音频常有惊喜采样率、压缩、流式
网格 / Nanite大LOD 套数、Nanite 压缩
动画大见 动画压缩与内存
光照贴图视方案而定见 光照与烘焙
着色器变体多时很大减少 permutation(见 材质与着色器编译)
引擎与空包底噪固定裁剪不需要的插件与模块

优化顺序:先纹理,再音频,再网格/动画,最后才是裁剪引擎。

4. 分平台与分发

机制说明
Chunk 划分见 AssetManager 与 Cook 与打包流程
Android App Bundle / OBB见 Mobile 与 Release
iOS On-Demand Resources同上
按需下载ChunkDownloader 或自建(见 热更新与补丁)

主包应尽量只放启动必需内容,其余走按需下载。

5. CI 监控(防悄悄变大)

做法说明
每次构建记录包体大小形成趋势曲线
按类别记录能直接看出是哪类资产涨了
设置阈值报警超过阈值就通知
与大文件清单一起记录定位具体资产

包体几乎总是"一点一点涨上去的",没有监控的话发现时已经很难拆。

6. 代价与权衡

手段收益代价什么时候不该用
降纹理分辨率收益最大画质下降关键 UI 与特写资产不要降
换压缩格式省体积可能有画质损失法线/特殊贴图要单独设
减少 LOD 套数省远处精度下降Nanite 路线不需要 LOD
音频降采样/流式省音质与首次播放延迟短音效不必流式
减少 shader permutation省包体 + 省编译时间材质灵活性下降见材质篇
裁剪引擎模块/插件省底噪可能丢功能要回归验证
按需下载主包小运行时下载依赖网络启动必需内容不能拆

7. 踩坑与排查

坑现象怎么验证
只看总包体不知道改哪分类别统计
忘了未使用资产被打进包检查引用链与 PrimaryAsset 规则(见 Cook)
资产被多 Chunk 引用重复打包SizeMap 核对
编辑器资产打进包无谓膨胀检查 bIsEditorOnly
shader 变体爆炸包体 + 编译时间减少 Static Switch(见材质篇)
没有 CI 监控悄悄变大建立趋势记录
只在开发配置测与发布配置不同用发布配置出包测
忘了平台差异某平台超标按平台分别统计

8. 排查顺序

1. SizeMap / PakViewer → 找最大的资产与依赖
2. 分类别统计 → 按优先级处理(纹理 → 音频 → 网格/动画 → 着色器)
3. 检查未使用资产与重复打包
4. 主包瘦身:按需下载拆分
5. 建立 CI 包体监控防回归

参考