AssetRipper Unity 资源提取完整指南:从黑盒游戏文件到可运行工程
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款用于分析 Unity 游戏文件的图形界面工具,能把游戏里的序列化文件(.assets,Unity 存储资产的二进制格式)和 AssetBundle(资源包)解析出来,再导出成 Unity 原生 YAML 工程。它支持 Unity3.5.0到6000.5.X的版本区间,官方提供 Windows、macOS、Linux 三平台的 x64 与 Arm64 预编译包。官方列出的四个典型用途:找出被误打包进游戏的依赖资产、把资产转回 Unity 引擎原生格式、定位无法内联或裁剪掉的代码、发现会导致游戏异常的坏引用(详见 README)。
AssetRipper 主界面:左侧资产树、右侧属性面板,导入后逐层浏览游戏对象
看懂 AssetRipper 如何把黑盒文件变成可编辑工程
一句话概括痛点:Unity 构建出的文件对人类不可读——资产被序列化进二进制文件,C# 代码被编进.dll或被 Il2Cpp 转成 C++,AssetRipper 做的是把这条链反向走一遍:解析二进制结构 → 还原对象与引用关系 → 导出成 Unity 编辑器能直接打开的 YAML 工程。
整个流程分三步,理解了机制,后面所有操作都能对号入座:
- 导入(Import):把文件或文件夹拖进界面,工具识别序列化文件、AssetBundle、
.dll程序集和配置脚本,日志会报告检测结果,例如Files use the 'Mono' scripting backend。 - 重建(Rebuild):根据文件内的 TypeTree(描述每个字段类型与结构的元数据)还原对象字段,把引用关系接回 GameObject 层级。
- 导出(Export):按资产类型分流到 Unity 工程的对应位置——模型、纹理、音频、脚本、预制体各归其位,生成
Assets/目录结构与.meta文件。
三个环节环环相扣:导入缺程序集,导出的 MonoBehaviour 就会缺脚本类;导出格式选错,Unity 编辑器可能打不开工程。下文的每个场景都围绕这三个环节展开。
弄清了工作流,下面给出两条安装路径,任选其一即可启动。
源码构建与预编译包:两条路跑起来 AssetRipper
方式 A:源码构建(拿到最新开发版本,需要 .NET 10 SDK)
macOS / Linux:
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper cd AssetRipper dotnet restore dotnet build --configuration Release dotnet run --project Source/AssetRipper.GUI.Free/Windows(PowerShell):
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper cd AssetRipper dotnet restore dotnet build --configuration Release dotnet run --project Source\AssetRipper.GUI.Free\方式 B:免编译直用(从项目 Releases 页面下载对应平台的 zip,分三档:稳定版、Pre-Release、Nightly,Nightly 基于每次提交自动构建,官方标注"高度实验性,可能含 bug",生产用途建议选稳定版,详见 Downloads)
解压后目录里就是可执行文件AssetRipper.GUI.Free:
预编译包解压后的目录:包含 AssetRipper.GUI.Free 可执行文件及依赖
macOS / Linux 首次运行需要终端:
cd AssetRipper_mac_arm64 ./AssetRipper.GUI.Free chmod +x AssetRipper.GUI.Free # 仅在报 Permission denied 时执行,再重试Windows 下直接双击AssetRipper.GUI.Free.exe即可。macOS 还会弹出 Gatekeeper 安全提示,按 RunningOnMac 指南 在"系统设置 → 隐私与安全性"里点"仍要打开"。
安装只是起点,接下来用三个高频场景把它用起来。
三个实战场景:整工程导出、Bundle 取脚本、Il2Cpp 导入
AssetRipper 运行状态:导入完成后在资产树中确认目标对象,再执行导出
把整个游戏工程导出成 Unity 项目
前提条件
- 已定位游戏的根目录(包含
.assets、.unity、Level文件或AssetBundles文件夹)。 - 本机装有 Unity Editor,版本不低于游戏所用版本,理想是与游戏版本完全一致(要求见 Requirements)。
步骤
- 启动 AssetRipper,把游戏根目录整个拖进窗口。
- 等待导入完成,在左侧资产树展开场景与资产,确认目标对象(GameObject、材质、脚本类)都能点开且属性不为空。
- 菜单选择导出目标(Unity 工程目录),点击导出。
- 用对应版本的 Unity Editor 打开导出目录。
预期结果
生成一个标准 Unity 工程:Assets/下按类型分目录存放纹理、音频、模型与脚本,每个资产带.meta文件,场景可拖入 Hierarchy。若个别 MonoBehaviour 显示"Missing Script",通常是缺程序集,见下文场景二。
把 Bundle 里的 C# 脚本一起救回来
AssetBundle 本身不保存 Mono 脚本——C# 代码在Managed/文件夹的.dll里,不带上程序集,导出时脚本类必然缺失(依据 CommonIssues)。
前提条件
- 已提取游戏的
AssetBundles和Managed文件夹(Il2Cpp 游戏的Managed可能只有Assembly-CSharp.dll等少数文件,或根本没有,见场景三)。 - 游戏使用 Mono 后端(纯 Il2Cpp 游戏见下节)。
步骤
- 建一个文件夹,把
Managed/下的所有.dll和要拆的 AssetBundle 放进同一个文件夹。 - 把这个文件夹整体拖进 AssetRipper(程序集和 bundle 必须同一次导入)。
- 查看导入日志。
- 确认无误后导出 Unity 工程。
预期结果
日志出现Import : Files use the 'Mono' scripting backend.即程序集识别成功;导出的 MonoBehaviour 能关联到脚本类。若日志显示'Unknown' scripting backend,说明程序集不完整或与 bundle 不匹配,回到第 1 步补齐。
导入 Il2Cpp 游戏(需要先做一步预处理)
Il2Cpp 游戏把 C# 转成了 C++ 再编译,原生Managed里没有完整程序集,AssetRipper 无法直接还原脚本。
前提条件
- 已用 Cpp2IL 一类的工具从游戏文件生成 C# 程序集(
*.dll)。注意:Il2CppInterop 这类为 Mod 生成的程序集不被支持。 - 游戏的
Global-metadata.dat等 Il2Cpp 元数据仍在手上。
步骤
- 先用 Cpp2IL 完成解包,得到一批
.dll。 - 将这些
.dll与游戏的 AssetBundle 放入同一文件夹。 - 整体拖进 AssetRipper,等待日志确认
Mono后端识别。 - 导出工程,检查
MonoBehaviour的字段序列化是否正常。
预期结果
脚本类被还原并与 MonoBehaviour 字段对应;Il2Cpp 的字段解析精度受程序集质量影响,个别字段缺失属正常现象。
场景跑通后,剩下的差距往往在配置与系统参数上,下面是可落地的调优项。
调优:日志、文件上限与版本匹配
调整日志级别让大工程导入更清爽
配置文件位于 Source/AssetRipper.GUI.Free/appsettings.json(预编译包同目录下),逐字段说明:
{ "Logging": { "LogLevel": { "Default": "Information", // 全局默认日志级别:Information 含导入进度细节 "Microsoft.AspNetCore": "Warning" // 内置 Web 服务器内部日志,只保留警告以上 } }, "AllowedHosts": "*" // 允许任意主机名访问本地 Web 服务 }数值区间建议:日常排查导入问题保持Information;当一次导入几千个文件、日志刷屏到无法定位关键行时,把Default改为Warning,只保留警告和错误。此改动对 8GB 内存以下、导入大工程时日志拖慢界面刷新的机器收益最明显。
抬高 Linux 文件描述符上限
Linux 下导入文件数多的工程可能报错Too many open files。在同一终端运行 AssetRipper 前执行:
ulimit -n 10485761048576是官方文档给出的任意放大值(系统默认通常只有 1024);需要永久生效则改/etc/security/limits.conf(依据 CommonIssues)。适用条件:任何 Linux 机器,导入目标文件数超过上千时预防性执行。
让 Unity Editor 版本对齐游戏版本
导出后要进 Unity Editor 打开工程,版本错配是打不开工程的第一大原因:Editor 版本必须至少不低于游戏版本,与游戏版本完全一致时兼容性最好(要求见 Requirements)。判断方法:在 AssetRipper 导入日志中查看文件标注的 Unity 版本,用 Unity Hub 装对应版本(老版本可从 Unity 官方归档页下载)。
按需开启实验性脚本分析
高级设置里的 Script Content Level 3 会启用实验性 Il2Cpp 分析,官方给出的成功率数据:x86 游戏约 10%~20% 的方法可还原,其他平台更低(见 PremiumFeatures)。它耗时明显高于常规导出,仅建议在确实需要 Il2Cpp 代码级分析、且机器空闲时启用;普通 Mono 游戏不需要。
参数调完,最后一关是排错。以下是仓库文档记录的五个高频故障。
避坑清单:五个高频错误的现象与解法
🔧 每条按"现象 → 原因 → 解法"组织,均可在 CommonIssues 与 RunningOnMac 中查到原文依据。
| 现象 | 原因 | 解法 |
|---|---|---|
| 导出 bundle 后拿不到 Mono 脚本 | AssetBundle 里本就不存 C# 代码,代码在Managed/*.dll中 | 程序集与 bundle 放同一文件夹、同一次拖入;Il2Cpp 游戏先用 Cpp2IL 生成程序集 |
日志报Could not add pe assembly to name dictionary! | Managed目录(含子目录)里存在两个同名程序集(按反编译器显示的程序集名,不是文件名) | 找到重名的两份程序集,删掉其中一份再导入 |
| 修改过的程序集导致字段反序列化错误或反编译报错 | 公开化(Publicize)、删特性、改方法体都会改变字段序列化结果 | 使用游戏原始程序集;Il2CppInterop 生成的程序集不适用 |
Linux 报System.IO.IOException: Too many open files | 系统文件描述符软上限(默认 1024)被大工程导入耗尽 | 运行前ulimit -n 1048576,永久方案改/etc/security/limits.conf |
macOS 运行报Permission denied | 预编译包可执行文件没有执行权限 | 终端执行chmod +x AssetRipper.GUI.Free后重跑,再处理 Gatekeeper 弹窗 |
另外两条版本选择建议:稳定版用于日常与交付,Pre-Release 用于验证新功能,Nightly 仅用于尝鲜与回归测试(官方明确标注其"高度实验性",见 Downloads)。
如果你接下来要处理的是 Il2Cpp 游戏的脚本还原,下一个值得展开的主题是 Cpp2IL 的解包流程与元数据对齐——那是 AssetRipper 上游最常被问到的环节。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考