AssetRipper Unity资产提取上手指南:三步拿到可打开的Unity工程
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一个跨平台的 Unity 资产提取 GUI 工具:读取游戏的序列化文件和资源包,把资产转成原生 Unity 引擎格式,并恢复脚本内容。适合做 Mod 的开发、旧项目资产恢复人员,以及需要分析游戏资产结构的学习者。
📥 谁会用这个工具
- Mod 开发者:从目标游戏里提取模型、贴图、音频,保存为 Unity 可直接导入的格式后二次开发。
- 资产恢复人员:原始工程丢失时,从编译产物中找回部分资产。
- 学习者:分析某款游戏的资产组织、材质与动画实现、脚本逻辑。
第一次提取,三步跑通
按系统拿对版本
各平台安装包清单在 docs/articles/Downloads.md,按系统和架构区分:
| 系统 | 包名 |
|---|---|
| Windows | AssetRipper_win_x64.zip/AssetRipper_win_arm64.zip |
| macOS | AssetRipper_mac_x64.zip/AssetRipper_mac_arm64.zip(Apple Silicon 选 arm64) |
| Linux | AssetRipper_linux_x64.zip/AssetRipper_linux_arm64.zip |
到项目的发布页面下载对应压缩包,解压到任意目录即可,可执行文件就在解压后的文件夹里,没有安装步骤。
启动并导入第一份文件
运行可执行文件,用打开功能选中游戏根目录,或直接选几个.assets/.bundle文件。AssetRipper 会解析文件、列出资产,选中目标资产后保存导出即可。
两个注意点:macOS 用户首启受系统限制时参考 docs/articles/RunningOnMac.md;Linux 需要 webkit2gtk 运行环境,缺失要先安装。
首次运行要改哪几个设置
设置页默认值(对应 Source/AssetRipper.Export/Configuration/ExportSettings.cs 中的默认配置)已经可用,建议重点确认这五项:
| 设置项 | 默认值 | 建议 |
|---|---|---|
| 图像格式 | PNG,且勾选"优先保留原扩展名" | 保留默认,大体积 UI 贴图可改 JPG |
| 脚本模式 | Hybrid(主程序集反编译,其余保留 DLL) | 要完整脚本选 Decompiled;内容最全但较慢、编译报错多 |
| 音频格式 | Default | 推荐 Ogg |
| Sprite 模式 | Yaml | 改 Native 保持 Unity 原生格式 |
| Shader | Dummy(占位导出) | 默认不导出完整着色器代码 |
⚙️ 它能做什么,不能做什么
版本支持:官方声明覆盖 Unity3.5.0到6000.5.X,但各版本支持质量略有差异:
| 方面 | 说明 |
|---|---|
| 版本范围 | Unity 3.5.0 – 6000.5.X |
| 输入 | 序列化文件(.assets、.sharedAssets等)、资源包、整个游戏目录 |
| 输出 | 编辑器可直接打开的 Unity 工程,资产为原生格式 |
能做的事
按项目 README 的说法,共四件:
- 找出被误打进游戏的依赖资产;
- 把资产转换成原生 Unity 引擎格式;
- 识别没能被内联或裁剪掉的代码;
- 找出会导致运行时问题的损坏资产引用。
不能做的事
- IL2Cpp 游戏:无法直接反编译出 C# 源码,需先生成程序集,否则拿不到脚本;
- 资源包里的脚本:bundle 中不存储 Mono 脚本,要导出脚本必须把程序集文件放到同一目录一起拖入;
- Shader:默认模式导出占位内容,不是完整着色器代码;
- 支持质量:新旧极端版本能解析,但结果质量不保证一致。
导出系统按资产类型拆成独立模块(模型、纹理、音频各自一个子项目),新增导出目标时扩展成本较低。
⚠️ 提取失败最常踩的三个坑
坑一:导出结果里没有脚本
- 现象:导出 bundle 后工程里没有 Mono 脚本。
- 原因:脚本存在 C# 程序集(
.dll)里,资源包中不存脚本。 - 解法:把程序集与 bundle 放同一目录同时拖入,日志出现
Files use the 'Mono' scripting backend即成功。
坑二:重复程序集报错
- 现象:日志出现
Could not add pe assembly to name dictionary!。 - 原因:目录中存在两个同名程序集。
- 解法:清掉重复命名的程序集后重新导入。
坑三:Linux 文件句柄报错
- 现象:
System.IO.IOException: Too many open files。 - 原因:Linux 默认文件句柄上限过低。
- 解法:运行前在终端执行
ulimit -n 1048576。
三处细节在 docs/articles/CommonIssues.md 中都有展开。
🔍 核心机制速览
文件到 Unity 工程的三层路径
读取层 Source/AssetRipper.IO.Files/ 负责 bundle、序列化文件、压缩文件的读取;处理层 Source/AssetRipper.Processing/ 解析序列化结构、组织资产;导出层 Source/AssetRipper.Export.UnityProjects/ 把它们写成 Unity 工程目录。
导出器按资产类型拆分
模型、纹理、音频各有独立子项目(如Source/AssetRipper.Export.Modules.Models/),通过 Source/AssetRipper.Export/ObjectHandlerStack.cs 统一分发,某一类资产的处理逻辑可以单独替换。
小结
AssetRipper 的工作流很线性:选对版本、拖入文件、确认导出设置,就能得到一个可打开的 Unity 工程。遇到版本或脚本相关的问题,大概率在排错文档里已经写明。下一步动作:打开 docs/articles/Downloads.md,按你的系统选包,先拿一个小的.bundle文件试跑一次。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考