AssetRipper 使用指南:从 Unity 游戏文件中提取资产并导出为原生格式的教程
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款用于解析 Unity 游戏文件的 GUI 工具,能从序列化文件(如 .assets、.sharedAssets)和资源包(.bundle)中提取模型、纹理、音频、脚本等资产,并转换回 Unity 引擎原生格式,适合刚接触资产逆向的开发者、Mod 制作者和游戏 QA 人员。它支持 Unity 3.5.0 到 6000.5.X 之间的版本,不同版本的支持质量略有差异。
📂 三类典型使用场景
先看几个具体的使用情境,帮你判断这个工具是否适合你。
场景一:QA 或发行方做发布前检查。游戏打包后,有些依赖资产会被意外打进包里(比如测试用贴图、废弃的模型)。用 AssetRipper 导入打包产物,可以在资产树里浏览所有被包含的对象,定位"不该出现在游戏里"的资产。
场景二:Mod 作者回收游戏资产。你手上只有一个发布包,没有原始工程。把游戏目录下的 .assets 文件和 Managed 文件夹一起拖进 AssetRipper,导出的脚本和资产可以直接放进 Unity 工程做二次开发。
场景三:技术研究者分析 Unity 内部结构。想弄清某个资产在序列化文件里如何存储、字段如何反序列化,可以直接读源码:解析层在 Source/AssetRipper.IO.Files/,序列化逻辑在 Source/AssetRipper.SerializationLogic/。
| 没有 AssetRipper | 有 AssetRipper |
|---|---|
| 手工解析二进制序列化文件,字段含义靠猜 | 自动识别 Unity 版本并建立资产依赖树,GUI 内可直接浏览 |
| 拿不到打包产物里的原始脚本(已被剥离或内联) | 配合 Managed 程序集反编译导出 C# 脚本 |
| 资产只能停留在二进制格式,无法直接进 Unity 工程 | 一键导出为 Unity 原生 Yaml 资产,直接可用 |
🚀 首次运行的完整流程:从下载到导出第一个工程
第 1 步:获取程序
- 直接运行:从 docs/articles/Downloads.md 列出的稳定版选择对应平台的 zip(Windows x64/Arm64、macOS x64/Arm64、Linux x64/Arm64),解压即用。
- 从源码构建:仓库 Source/ 目录下是完整解决方案,需要 .NET 10 SDK 和支持 C# 14 的 IDE(如 VS Code 加 C# 扩展),构建入口为 Source/AssetRipper.slnx。如果要从源码开始读代码:
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper cd AssetRipper dotnet build AssetRipper.slnx- 预期结果:得到各平台的 zip 包,或本地编译出可执行文件。
第 2 步:处理平台差异
| 平台 | 启动方式 | 注意点 |
|---|---|---|
| Windows | 解压后直接运行 GUI 可执行文件 | 无特殊操作 |
| macOS | 终端执行./AssetRipper.GUI.Free | 报 Permission denied 时先chmod +x AssetRipper.GUI.Free;首次运行需在"系统设置 > 安全性与隐私"点"仍要打开",详见 docs/articles/RunningOnMac.md |
| Linux | 解压后运行 GUI 可执行文件 | 打开大量文件时可能需要ulimit -n 1048576(见问题排查) |
第 3 步:导入文件并导出
- 启动 GUI 后,把目标文件拖入窗口:.assets / .sharedAssets 序列化文件、.bundle 资源包、整个游戏资源目录,或同时拖入 Managed 程序集文件夹(脚本导出需要)。
- 预期结果:日志区显示导入进度,资产树出现场景与资产节点。看到
Import : Files use the 'Mono' scripting backend.表示脚本后端识别成功。 - 在设置里确认导出格式(下表的默认值都来自 Source/AssetRipper.Export/Configuration/ExportSettings.cs):
| 配置项 | 默认值 | 建议 |
|---|---|---|
| ImageExportFormat | Png | 保持默认;纹理以 PNG 导出,兼容性最好 |
| AudioExportFormat | Default | 注释推荐 Ogg,压缩率与质量平衡 |
| ScriptExportMode | Hybrid | 想要可读反编译代码时选 Decompiled |
| SpriteExportMode | Yaml | 注释推荐 Native(导出为原生 Sprite) |
| ShaderExportMode | Dummy | 先导出哑光占位着色器,保证工程能打开 |
| TextExportMode | Parse | 尝试解析 TextAsset 内容 |
| PreferOriginalTextureExtension | true | 保留原始纹理扩展名,建议不动 |
- 执行导出,得到标准 Unity 工程目录(Assets/ 下按资产类型组织)。
- 用 Unity 编辑器打开:编辑器版本应不低于(最好等于)目标游戏的 Unity 版本,参考 docs/articles/Requirements.md。
🧩 进阶用法:四个值得了解的功能
1. 静态网格分离(Static Mesh Separation)
- 一句话定义:还原 Unity 编译期把静态物体合并成一张大网格的优化过程。
- 适用场景:导出的模型是一坨无法编辑的合并网格,想拆回独立物体。
- 注意事项:开关默认开启;如果游戏文件中已存在原始网格会直接复用;合并会丢失网格名,改用 GameObject 名。源码位于 Source/AssetRipper.Processing/。
2. 着色器反编译(Shader Decompilation)
- 一句话定义:把编译后的着色器反编译回 HLSL 的实验性功能。
- 适用场景:需要还原材质表现而不是 Dummy 占位时,把 ShaderExportMode 从 Dummy 切换到反编译模式。
- 注意事项:尚未打磨完整,部分着色器会报错、Unity 中可能出现编译错误;Vulkan 着色器任意平台可反编译,DirectX 着色器只能在 Windows 上处理。详见 docs/articles/PremiumFeatures.md。
3. Prefab 轮廓重建(Prefab Outlining)
- 一句话定义:分析场景中重复的 GameObject 层级,把重复项重建为 Prefab。
- 适用场景:游戏编译后 Prefab 全部被内联实例化,你希望导出工程恢复 Prefab 结构。
- 注意事项:开关默认关闭,需要手动在设置中启用。
4. 资产路径重写(Asset Path Overrides)
- 一句话定义:通过 JSON 文件指定某个资产导出到哪条路径。
- 适用场景:想让导出结构符合你自己的工程规范,比如把某张纹理固定放到
Assets/Images/下。 - 注意事项:在菜单 View/Configuration Files 页面上传 JSON,格式为
文件路径 → { 资产 pathID: 目标相对路径 }的两层字典,示例见 docs/articles/PremiumFeatures.md。
🐞 高频问题排查
问题一:bundle 导出的工程里没有 Mono 脚本。
- 现象:资产正常,脚本为空。
- 可能原因:Mono 脚本不存在于 bundle 里,它们存放在 C# 程序集(.dll)中,你没把程序集一起导入。
- 解决步骤:把 Managed 文件夹(或全部 .dll)和 bundle 一起拖入 AssetRipper;确认日志出现
Mono而非Unknownscripting backend。若是 IL2Cpp 游戏,需先用 Cpp2IL 一类工具从游戏数据生成程序集再导入(Il2CppInterop 的产物不兼容)。详见 docs/articles/CommonIssues.md。
问题二:日志出现Could not add pe assembly to name dictionary!。
- 现象:导入阶段报签名类错误。
- 可能原因:Managed 目录或其子目录下存在两个程序集"名"相同(指反编译器显示的 assembly name,不是文件名)。
- 解决步骤:用反编译工具核对程序集内部名称,移走重复者后重新导入。
问题三:修改过的程序集导致读取错误。
- 现象:对程序集做过 publicize、删属性或改方法体后,MonoBehaviour 字段反序列化大量报错。
- 可能原因:这些改动会改变字段序列化行为或触发反编译器错误。
- 解决步骤:尽量使用游戏内原始程序集,不要使用处理过的副本。
问题四:Linux 上报System.IO.IOException: Too many open files。
- 现象:处理大目录时导入中断。
- 可能原因:系统文件描述符上限过低。
- 解决步骤:在同一终端执行
ulimit -n 1048576后再启动;长期方案是修改/etc/security/limits.conf。
问题五:macOS 双击打不开或报安全提示。
- 现象:无反应、权限拒绝或 Gatekeeper 拦截。
- 可能原因:可执行文件没有执行权限,或未通过安全白名单。
- 解决步骤:在资源管理器中对该目录执行
New Terminal at Folder,终端里chmod +x AssetRipper.GUI.Free后运行./AssetRipper.GUI.Free;随后到"安全性与隐私 > 常规"点"仍要打开"。完整图文步骤在 docs/articles/RunningOnMac.md。
📚 源码结构与社区参与入口
源码按"读取 → 处理 → 导出"分层,各模块相对独立,是学习 Unity 文件格式的好入口:
| 模块 | 路径 | 职责 |
|---|---|---|
| 文件解析 | Source/AssetRipper.IO.Files/ | 序列化文件、AssetBundle、压缩包等格式读取 |
| 资产模型 | Source/AssetRipper.Assets/ | 资产对象、克隆、引用解析 |
| 导入结构 | Source/AssetRipper.Import/ | 把文件变成资产树 |
| 处理逻辑 | Source/AssetRipper.Processing/ | 场景、Prefab、程序集等资产的处理 |
| 导出 | Source/AssetRipper.Export/ 与 Source/AssetRipper.Export.UnityProjects/ | 导出配置、Unity 工程生成、各资产类型处理器 |
| 脚本反编译 | Source/AssetRipper.AssemblyDumper/ | IL 反编译为 C# 的 Pass 流水线 |
| GUI | Source/AssetRipper.GUI.Web/ | 基于 Web 的界面页面与路由 |
测试覆盖了各层核心逻辑(如 Source/AssetRipper.Tests/、Source/AssetRipper.IO.Files.Tests/),跑通测试后再改代码是比较稳的做法。
社区入口:项目仓库的 Issue 跟踪区(提 bug 时附上日志文件)、官方文档站 docs/(含 Requirements、CommonIssues、RoadMap)、Weblate 翻译平台(Localizations/ 已有 20+ 语言的界面翻译)。最小贡献路径:先修一处文档错别字或补一条 FAQ,熟悉流程后再从测试或小工具(Source/AssetRipper.Tools. 下的若干独立控制台程序)下手。
📌 小结
AssetRipper 的工作流就是"拖入文件 → 确认脚本后端识别成功 → 调整导出格式 → 生成 Unity 工程",脚本导出记得连同程序集一起导入。建议的第一步:挑一个你手头的小游戏包,按上面的流程完整跑一次导出,再打开 docs/articles/CommonIssues.md 对照日志确认每一步的识别状态。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考