免费Unity资产提取工具AssetRipper完整指南:快速导出Bundle与序列化文件为原生格式
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款免费、跨平台的 Unity 游戏资产提取工具。它能解析.assets、.sharedAssets 序列化文件和.unity3d、.bundle 资源包,把模型、贴图、音频、脚本等内容导出为独立资源,或直接重建出一个可导入 Unity 的完整工程。无论你是想给自己游戏查"混入"资产的开发者、想还原原始工程的逆向爱好者,还是只想把贴图音频抠出来用的 Mod 制作者,它都能直接上手。
能力全景:AssetRipper 具体能做什么
先抛开形容词,直接看它做的事:
- 独立资源导出:把资源包或序列化文件里的 Mesh、Texture、AudioClip、ScriptableObject 等拆出来,模型、贴图、音频各归其位。适合 Mod 制作者和研究者,拿到手就能用。
- 完整 Unity 工程重建:导出包含场景、预制体、材质、着色器的工程,结构尽量贴近原始项目。适合想"把游戏资源搬回编辑器"的开发者。
- 构建体检:找出被意外打包进游戏的依赖资产、指向失效资产的坏引用,以及没被成功裁剪或内联的代码。这对做包体优化的团队尤其实用。
- 程序集反编译:对 C# 程序集做 dump 与反编译,配合脚本提取还原 MonoBehaviour 逻辑。适合逆向工程师。
- 版本覆盖面:官方声明支持 Unity 3.5.0 到 6000.5.X 的绝大多数版本(不同版本的支持质量略有差异)。
- 图形界面:Windows、macOS、Linux 三平台都有 GUI 版本,拖入文件即可开始,不强制命令行。
一句话概括:它同时覆盖"抠资源"和"还工程"两类需求,外加一套文件诊断能力。
场景化上手:以"想完成的事"为起点
场景一:我只有一个 .assets 或 .bundle 文件,想把资源抠出来
- 从官方下载页拿到对应平台的稳定版压缩包(Windows 分 x64 / Arm64,macOS 分 Intel x64 与 Apple Silicon Arm64,Linux 分 x64 / Arm64)。
- 解压后直接运行里面的可执行文件,无需安装。
- 把目标文件拖进窗口,等扫描完成,在文件树里查看内容,导出即可。
场景二:我要导出完整工程,而且希望带上 C# 脚本
这里有个关键认知:C# 脚本通常不在资源包里,而在 .dll 程序集中。所以:
- 把游戏的相关程序集(.dll)放进同一个文件夹;
- 把该文件夹和资源包一起拖入 AssetRipper;
- 查看日志,出现
Files use the 'Mono' scripting backend说明识别成功;若显示Unknown,说明程序集没配对。
场景三:我在 macOS 或 Linux 上第一次运行
macOS 上有社区维护的运行指南(见 docs/articles/RunningOnMac.md),涉及终端执行、权限与安全提示的处理;Linux 用户如果遇到文件句柄报错,参考后文"踩坑急救"。
上手小结:先拖文件跑通一次"抠资源",再处理脚本与工程级导出,别一上来就追求全量还原。
版本选择与导出配置:按需怎么调
先选对版本。发布渠道分三档:稳定版适合日常使用;预发布版包含实验性功能,可能有不稳定;nightly 每次提交都会自动构建,高度实验性质,只建议尝鲜者使用。
再调导出选项。启动时的配置面板提供了一组下拉选项(见下图),常见的选择逻辑是:
- Mesh 导出格式:默认 Native,编辑器内兼容性最稳,后续可通过 Unity 包转成其它格式;
- 图像:默认 Png,影响所有导出图片;
- 音频:默认按资源包内嵌格式导出,多数是 WAV,部分为 OGG;
- Sprite:Unity 精灵格式,注意它在 Unity 之外无法直接查看;
- Terrain:选 Unity 原生格式,适合你打算把地形的结果导回 Unity 的场景;
- TextAsset:选 Parse 时会按内容猜测扩展名(如 JSON 内容得到 .json);
- Script Content Level:默认 Level 2——Mono 游戏导出完整方法体,IL2Cpp 游戏导出空壳方法;
- C# 语言版本:默认 Automatic - Safe,自动选取安全的反编译语言版本。
最后配好配套环境:如果你要把导出工程导入 Unity 编辑器,编辑器版本应不低于目标游戏,理想情况是与游戏版本完全一致。
配置小结:默认值已经能跑通绝大多数场景,真正需要动的通常只有 Mesh、音频和脚本这三个选项。
常见误区 vs 高效做法
| 常见误区 | 高效做法 |
|---|---|
| 以为 bundle 里有脚本,拖入后抱怨"怎么没有 C#" | 脚本在 .dll 程序集里,程序集与资源包同时拖入,并以日志中的后端识别结果为准 |
| 把手头能找到的 dll(含 mod 改过的、publicized 过的)一股脑塞进去 | 用原始未修改的程序集;修改过的程序集会改变字段反序列化行为,是大量报错的来源 |
| Linux 上处理大文件报"打不开的文件太多",以为工具崩溃 | 是系统文件句柄上限过低,在终端里先调高ulimit -n再启动即可 |
| 导出工程的目录结构和原游戏对不上,只能手动逐个改名 | 通过路径覆盖配置(Path Overrides)按资源 path id 指定输出位置,一次批量搞定 |
| 想试用新特性,却只盯着稳定版等更新 | 实验性功能(如着色器反编译)走预发布版或 nightly,稳定版只保日常 |
提速小结:大多数"提取失败"不是工具不行,而是输入文件组合方式不对。
Premium 版:解锁后多得到什么
AssetRipper 本体免费(GPLv3 许可),另外有一个 10 美元订阅制的 Premium 版本,面向"想让导出结果更接近原始项目"的进阶用户。订阅后新增的能力:
- 静态网格分离(默认开启):游戏编译时标记为静态的对象会被合并成一个网格以降低 draw call,这个功能反向拆回独立网格,跨场景重复使用时会智能合并为一份;
- 着色器反编译:实验性着色器反编译器,目标是保留全部变体与语义。Vulkan 着色器任意平台可反编译,DirectX 着色器仅 Windows 可用;
- 预制体还原(默认关闭):分析场景中重复的 GameObject 层级,把被内联的预制体重新"抽"出来;
- 传统 IL2Cpp 代码分析:在设置中把 Script Content Level 提到 3 即可启用,走传统反编译路线,官方给出的成功率约为 x86 游戏 10%–20% 的方法,仍在持续改进;
- 资产去重(默认关闭):还原被多个 bundle 重复打包的共享资产,目前覆盖 Mono 脚本、着色器、计算着色器、音频、文本资产、网格与无精灵贴图;
- 包引用导出与路径覆盖:解决导出工程的脚本/包引用冲突,并允许用 JSON 配置改写单个资源的输出路径。
解锁小结:免费版解决"能不能提取",Premium 解决"提取结果离原工程有多近"。
踩坑急救:四类高频提取失败的排查路径
问题 1:导出结果里看不到任何 C# 脚本
- 原因:Mono 脚本根本不存在于资源包中,只存在于程序集里;没带程序集,自然导不出。
- 解法:程序集目录与资源包一起拖入,确认日志显示 Mono 后端;IL2Cpp 游戏则需先用 Cpp2IL 这类工具从 IL2Cpp 生成程序集再喂给 AssetRipper。
问题 2:日志反复出现Could not add pe assembly to name dictionary!
- 原因:Managed 目录(含子目录)里存在两个同名程序集,名字以反编译器里显示的汇编名为准,不是文件名。
- 解法:清理出重名的那一份,只保留一个。
问题 3:大量反序列化错误或反编译报错
- 原因:用了被修改过的程序集——公开化(publicized)、去特性、改方法体等改动都会干扰字段反序列化或反编译。
- 解法:换回原始程序集;modding 用的 Il2CppInterop 生成程序集与 AssetRipper 不兼容。
问题 4:Linux 上报Too many open files
- 原因:系统的文件句柄软上限设置过低,与工具本身无关。
- 解法:同一终端先执行
ulimit -n调高上限(例如 1048576)再启动;需要永久生效可修改/etc/security/limits.conf。
排障小结:先看日志关键词,再对照"输入文件组合",九成问题出在程序集这一环。
源码导览:这份提取工具是怎么组织的
源码是 C# 编写的模块化解决方案(解决方案文件为 AssetRipper.slnx),从 Source/ 目录往下看:
- Source/AssetRipper.IO.Files/:一切读取的入口。
BundleFiles/处理资源包,SerializedFiles/处理序列化文件,CompressedFiles/与Streams/负责压缩与流,另有VirtualFileSystem统一管理文件访问。 - Source/AssetRipper.Assets/:内存中的资产对象模型,Unity 对象的继承体系与遍历逻辑都在这里。
- Source/AssetRipper.SerializationLogic/:把字节流解析为字段值的核心,负责类型判定与托管引用解析。
- Source/AssetRipper.Export.UnityProjects/:完整工程导出,
Project/、Scripts/、Shaders/、Terrains/等子目录对应工程里的各个板块;Source/AssetRipper.Export.PrimaryContent/ 则负责独立资源导出。 - Source/AssetRipper.AssemblyDumper/:程序集反编译与 dump,
Passes/下 80 多个文件是它的各类处理通道。 - Source/AssetRipper.Processing/:连接"读入"与"导出"的中间处理管线(场景、预制体、动画、音频混合器等各模块处理器)。
- Source/AssetRipper.GUI.Web/:基于 Avalonia 的跨平台界面,
Pages/下 60 多个页面文件。 - 实用小工具在
Source/AssetRipper.Tools.*/,如 FileExtractor、TypeTreeExtractor 等。
本地构建需要 .NET 10 SDK 与支持 C# 14 的 IDE(详见 docs/articles/Requirements.md),克隆仓库命令:git clone https://gitcode.com/GitHub_Trending/as/AssetRipper。
导览小结:数据流是 IO.Files 读入 → Assets 建模 → Processing 加工 → Export 落盘,顺着这条线读代码效率最高。
走向未来:官方路线图说了什么
参照 docs/articles/RoadMap.md,官方把计划分成两档:
- 已计划、未排期:基于类型树重建程序集的脚本导入;带程序集重命名的脚本导出;以 SerializedFile 写入替代 YAML 的二进制导出;场景与材质的界面预览。
- 概念池(官方明确注明"不代表承诺"):WWise 音频提取、资产编辑与 bundle 重新打包、树视图搜索、可选导出、异步导入导出等。
走向未来的基调很明确:近期重心是"导出的保真度"和"界面的可用性",编辑与重打包仍是远期探索。
收尾:三条核心价值与下一步
- 输入宽:从 Unity 3.5.0 到 6000.5.X 的序列化文件与资源包都能解析,老游戏新游戏通吃。
- 输出实:既能抠出独立资源,也能还原出接近原始结构的完整 Unity 工程,而不是只给你一堆散图。
- 门槛低:三平台 GUI、拖拽即用,免费版功能完整,进阶需求再考虑 Premium。
下一步很简单:选一个你手头的 .assets 或 .bundle 文件,拖进稳定版跑一次导出——先跑通最小闭环,剩下的配置选项自然知道该怎么调了。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考