加载大包闪退 / 内存爆掉 — 先 Extract 再 Load 是铁律
现象
加载 AssetBundle 时 AssetStudio 突然消失、操作系统弹"内存不足"提示、或者加载进度条卡在某个百分比不动了。手机版更频繁——可能加载到一半直接被 Android system kill。
原因
AssetStudio(含 AssetStudioMod)加载 AssetBundle 时的流程是:
- 读取 AssetBundle 文件头;
- 在内存里解压整个包;
- 解析 TypeTree 和对象表;
- 逐个反序列化资产。
整个 AssetBundle 解压后的大小可能是原文件的 2-5 倍——一个 500MB 的 OBB 解压后可能 2GB+。AssetStudio 加载时内存峰值会顶上去,操作系统的可用内存不够就直接杀进程。
正确做法:先 Extract 再 Load
AssetStudio 和 AssetStudioMod 的 File 菜单里提供了 Extract 命令:
- File → Extract file(或 Extract folder);
- 选一个新的空目录作为解压落点;
- 等解压进度条走完;
- File → Load folder,这次加载的是解压后的目录(不是原始 AssetBundle)。
解压后的文件就是普通 Unity 序列化文件,AssetStudio 读取时不再整包占内存——读哪个文件解压哪个,内存峰值低得多。
实战数字
| AssetBundle 大小 | 解压后大小 | 直接 Load | 先 Extract 再 Load |
|---|---|---|---|
| 50MB | ~200MB | 可能卡一会儿但能完 | 流畅 |
| 200MB | ~800MB | 4GB RAM 可能爆 | 8GB RAM 稳 |
| 500MB | ~2GB | 8GB RAM 也危险 | 16GB RAM 稳 |
| 1GB | ~4GB | 绝大多数机器爆 | 32GB RAM 稳 |
手机版特别注意
手机 RAM 比电脑紧张太多:
- 4GB RAM 以下的手机 → 必须先 Extract,超过 100MB 的 OBB 建议回电脑搞;
- Android 的
Process.setThreadPriority杀后台机制更激进——AssetStudio 在后台停留久了再回来可能被杀; - 导出后的结果存在公共目录(Download / Pictures),不要放 App 私有目录里。
其他可能导致闪退的原因
| 原因 | 怎么确认 |
|---|---|
| .NET 运行时版本不对 | 看 AssetStudio 可执行文件目录,换匹配的 .NET Desktop Runtime |
| Unity 版本字段不准 | 手动用 --unity-version 指定 |
| UnityCN 加密包 | AssetStudioMod 会弹 "Detected encrypted bundle" 提示 |
| AssetBundle 文件头损坏 | 重新从游戏目录里复制一遍,核对文件大小 |
| 路径含中文 / 特殊字符 | 改成全英文路径再试 |