MonoBehaviour JSON 导出 — 程序集目录选择、Mono vs Il2Cpp 两种后端
MonoBehaviour 是什么
MonoBehaviour 是 Unity 的脚本挂载组件——开发者写的 C# 脚本挂载到 GameObject 上时,每个挂载实例的字段数据以二进制序列化存储在 AssetBundle 里。比如角色的血量、名字、阵营、当前状态这些游戏逻辑数据,很多都存在 MonoBehaviour 里。
AssetStudio 能把这些二进制数据反序列化成可读的 JSON——但有前提条件。
前提条件:你得给它对应的程序集
AssetStudio 反序列化 MonoBehaviour 需要知道字段名和类型。这些信息不在 AssetBundle 里——它们在编译后的 C# DLL 里。
第一次选中 MonoBehaviour 时会弹窗让你选程序集目录。不同 Unity 打包后端,找 DLL 的方法不一样。
Mono 后端(找 Managed 目录)
这是 Unity 早期默认的打包后端。打包后的结构里有一个 Managed 文件夹,里面放着所有 C# 程序集 DLL:
游戏根目录/
├── Managed/
│ ├── Assembly-CSharp.dll ← 游戏自身脚本
│ ├── UnityEngine.dll
│ ├── UnityEngine.UI.dll
│ └── ...
├── libmono.so
└── assets/bin/Data/
AssetStudio 弹窗里直接选 Managed 目录就行。它会自动扫描里面所有 DLL,找到 MonoBehaviour 的类型定义,然后反序列化二进制数据。
IL2CPP 后端(需要先生成 dummy dll)
这是 Unity 现在的推荐后端。它把 C# 代码提前编译成原生机器码(libil2cpp.so),Managed 目录不存在。AssetStudio 找不到任何 DLL,也就无法反序列化 MonoBehaviour。
解决方法:先用 Il2CppDumper(Perfare 另一个开源项目,跟 AssetStudio 配套的)生成一份 dummy dll,再把 dummy dll 目录喂给 AssetStudio。完整流程见下一节。
选对目录后
程序集目录选对了,AssetStudio 就会:
- 扫描 DLL 找到 MonoBehaviour 对应的 C# 类型;
- 按 TypeTree + 反射还原字段名、类型和值;
- 在右侧 Dump 面板里显示 JSON 结构。
之后就可以:
- Dump Selected Assets → 把 JSON 保存到文件;
- Export Selected Assets → AssetStudioMod 支持把 MonoBehaviour 直接导出为
.json。
常见问题
弹窗里选了 DLL 目录但还是解析失败
检查几点:
- DLL 版本对不对——必须跟 AssetBundle 对应的游戏版本一致;
- Unity 版本对不对——不同 Unity 版本生成的 DLL 格式略有差异;
- 是不是真的 Mono 后端——先确认游戏包里有没有
Managed目录,没有就是 Il2Cpp。
Il2Cpp 游戏直接喂了 Managed 目录(不存在)
那肯定解析不出来。Il2Cpp 后端 Managed 目录不存在,你必须先跑 Il2CppDumper 生成 dummy dll。
部分 MonoBehaviour 解析成功、部分失败
游戏里可能混用了多种打包方式,或者某个 MonoBehaviour 类型引用了外部 DLL(比如插件),那个 DLL 没放进你选的目录里。把游戏目录下所有 DLL 都放进去试试。
从 JSON 里能看到什么
Dump 出来的 JSON 结构大致长这样:
{
"m_Name": "Enemy_001",
"m_ClassID": 114,
"HP": 500,
"MaxHP": 500,
"Attack": 45,
"Defense": 20,
"Position": {"x": 12.5, "y": 0.0, "z": -8.3},
"isBoss": false
}
具体字段取决于开发者写的脚本里有哪些公开字段。这些数据对于做 Mod(改数值)、逆向(看游戏逻辑)非常有用。