AssetBundle 先解压再加载 — Extract file / Extract folder 避免内存爆掉
为什么需要先 Extract
AssetStudio 加载 AssetBundle 时走的流程是:
- 读取 AssetBundle 文件头;
- 根据压缩方式(LZMA / LZ4)在内存里解压整个包;
- 解析 TypeTree 和对象表;
- 逐个反序列化资产。
整个 AssetBundle 解压后的大小可能是原文件的 2-5 倍——一个 500MB 的 AssetBundle 解压后可能 2GB+。这时候 AssetStudio 会顶到可用内存上限,轻则加载慢(几十分钟),重则被操作系统直接杀掉进程。
正确姿势
AssetStudio 和 AssetStudioMod 都在 File 菜单里提供了 Extract file 和 Extract folder 两个命令:
- File → Extract file:选单个
.bundle/.ab文件,解压到指定目录; - File → Extract folder:选一个目录(比如整个 APK 解压目录),里面所有 Unity AssetBundle 会被批量解压到另一个目录;
- 等解压进度条走完;
- File → Load folder:加载解压后的目录(而不是原始 AssetBundle)。
解压后的文件就是普通 Unity 序列化文件,AssetStudio 读取时不再整包占内存,大包也能稳。
解压后的目录结构
解压后的目录按 AssetBundle 文件组织:
D:\game\extracted\
├── bundle001_bundle/
│ ├── asset_1234567890
│ ├── asset_2345678901
│ └── ...
├── bundle002_bundle/
│ └── ...
└── ...
每个子目录名后面加 _bundle 后缀,里面是 AssetBundle 内部的序列化文件。AssetStudio 加载解压目录时会自动识别这些文件。
什么时候必须先 Extract
| 场景 | 建议 |
|---|---|
| AssetBundle > 100MB | 先 Extract |
| 多个 AssetBundle 合计 > 500MB | 先 Extract 全部 |
| 手机上用 AssetStudio(RAM 紧张) | 必须先 Extract |
| Il2Cpp 游戏整体打包在 OBB 里 | 先 Extract OBB |
| 单个小 AssetBundle(< 50MB) | 可以直接 Load |
CLI 批量解压
AssetStudioMod CLI 也支持解压:
AssetStudioModCLI <asset folder path> -m extract -o <output folder>
这在自动化流水线里很有用——先全部解压,再批量导出。
其他解压器对比
Unity 自带的 WebExtract 和 Binary2Text 也能解 AssetBundle。AssetStudio 的 Extract 和它们的区别:
- Unity 官方工具解压后是纯二进制,需要自己找解码器;
- AssetStudio Extract 解压后是 AssetStudio 自己能直接 Load 的格式,省掉后续解码步骤。
实战里直接用 AssetStudio 的 Extract 就行,不用另起炉灶。