AssetRipper Unity资源提取完全指南:三步拿到游戏里的模型、贴图与脚本
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款免费的开源 Unity 资源提取工具,负责"Unity资源提取"这件事:它读取已发布游戏包的.assets文件或 AssetBundle,把 3D 模型、纹理、音频、脚本还原成你能直接打开的格式。开发者用它排查构建里混入的多余资产,技术爱好者用它学习 Unity 的序列化结构。
快速上手:第一次跑通只需要 5 步
- 拿到工具:从项目 Releases 页面下载对应系统的预编译包,解压即可;也可以直接从源码构建:
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper cd AssetRipper dotnet run --project Source/AssetRipper.GUI.Free/- 启动 GUI:源码方式启动后会自动打开窗口;二进制包方式直接双击
AssetRipperGUI可执行文件(macOS 上在终端里运行./AssetRipper.GUI.Free,遇到权限报错先执行chmod +x AssetRipper.GUI.Free)。 - 喂给它文件:把目标游戏的
.assets文件、AssetBundle 或整个游戏文件夹拖进窗口。 - 确认导出设置:首次使用保持默认即可,重点是
Mesh Export Format选Native、Image Export Format选Png。 - 点击 Export 并检查结果:导出完成后打开输出目录,能看到
.png图片、.asset网格等文件就说明跑通了。
按任务讲用法
下面三个任务覆盖了最常见的诉求。每个任务都按"想达成什么 → 关键设置 → 怎么验证"来讲。
任务一:提取能在 Unity 编辑器里直接导入的模型和贴图
想达成什么:拿到游戏里的 3D 模型、贴图和地形,重新拖回编辑器继续用,而不是拿到一堆只能看不能改的二进制数据。
关键设置(都在启动欢迎页的配置区,见下图):
| 设置项 | 推荐值 | 说明 |
|---|---|---|
| Mesh Export Format | Native | 编辑器原生格式,兼容性最好 |
| Image Export Format | Png | 带透明通道,通用性最强 |
| Sprite Export Format | Unity | 精灵格式,编辑器外无法查看 |
| Terrain Export Format | Unity | 地形数据,便于回导 |
| TextAsset Export Format | Parse | 按内容猜扩展名,JSON 会拿到.json |
怎么验证:导出的模型文件用 Unity 编辑器重新导入。注意编辑器版本要不低于目标游戏所用的版本,版本一致时兼容性最好。
任务二:拿到游戏的 C# 脚本源码
想达成什么:反编译出游戏逻辑代码,用于研究玩法实现或排查未被裁剪的冗余代码。
关键设置:把Script Content Level设为Level 2(默认值)。这里有一个必须知道的前提——脚本能不能拿到完整内容,取决于游戏用的是哪种脚本后端:
- Mono 后端:C# 代码编译在
Managed目录的 dll 里,Level 2 能导出完整方法体。 - IL2Cpp 后端:C# 代码已转成 C++ 再编译,只能导出方法名加空方法的"框架",这是 Unity 编译机制决定的,不是工具没尽力。
另外,如果你提取的是 AssetBundle 而看不到脚本,通常不是失败:脚本根本不存在 bundle 里,而是存在 dll 里。把 dll 所在文件夹和 bundle一起拖进 AssetRipper 再导出。
怎么验证:看日志。出现Files use the 'Mono' scripting backend.表示识别成功、可以拿到完整脚本;出现Unknown scripting backend则是没带上 dll 或游戏是 IL2Cpp。
任务三:开发者自查——找出混进构建的多余资产
想达成什么:这是 AssetRipper 对游戏开发者本身最有价值的用法——确认发布包里有没有意外打包进去的依赖资产、有没有会导致运行时报错的断裂引用。
关键设置:不需要特殊导出配置,直接把整个游戏文件夹导入,利用 GUI 的资产列表逐项检查即可;配合日志可以定位哪些对象引用了不存在的目标。
怎么验证:在列表里搜索你"以为没打进去"的资产名,搜到就说明它躺在包里;断裂引用会在处理日志中体现为解析警告,按提示的对象名回工程里补引用。
避坑 FAQ
以下问题按"问题 → 原因 → 做法"给出答案,均来自官方常见问题文档。
问:导出的脚本全是空方法体,是不是工具坏了?→ 原因:游戏是 IL2Cpp 后端,工具只能还原出方法签名框架。做法:接受框架结果,或用 Cpp2IL 一类的工具先把 IL2Cpp 还原成程序集再一起导入。注意 mod 社区常用的 Il2CppInterop 程序集不能用于此场景。
问:AssetBundle 提取后没有任何 Mono 脚本?→ 原因:脚本存放在 dll 里,bundle 里本来就没有。做法:把Managed文件夹(或 dll 集合)与 bundle 同时拖入导入。
问:日志报Could not add pe assembly to name dictionary!?→ 原因:Managed目录或其子文件夹里存在两个同名程序集(按反编译器里的程序集名判断,不是文件名)。做法:找到重复项只保留一份再重新导入。
问:Linux 下报Too many open files?→ 原因:系统文件描述符上限太低。做法:在同一终端先执行下面的命令再启动:
ulimit -n 1048576问:改过的程序集(publicize、删属性、改方法体)导入后大量报错?→ 原因:修改会破坏 MonoBehaviour 的字段反序列化或反编译过程。做法:尽量使用原版 dll;必须用改过的版本时,以报错对象名为线索逐个排查。
源码与文档地图
想深入原理或参与贡献,按下面这张小地图走即可:
- 入口程序:Source/AssetRipper.GUI.Free/,GUI 启动与入口参数都在这里
- 导出核心:Source/AssetRipper.Export/,其中 Configuration/ 定义了网格、图像、音频、脚本等全部导出格式枚举
- 导入逻辑:Source/AssetRipper.Import/,负责解析
.assets、AssetBundle 等文件结构 - 处理流水线:Source/AssetRipper.Processing/,资产分组与场景重建流程
- 常见问题清单:docs/articles/CommonIssues.md
- 运行与构建要求:docs/articles/Requirements.md
- macOS 启动教程:docs/articles/RunningOnMac.md
下一步
- 挑一个你手边最小巧的 Unity 游戏包,按"快速上手"完整走一遍,重点确认日志里的后端识别行。
- 把
Script Content Level分别在 Level 2 下对 Mono 游戏和 IL2Cpp 游戏各试一次,直观感受两者的差别。 - 翻一遍 docs/articles/CommonIssues.md,把报错关键词和本文 FAQ 对应起来。
设置调对了,第一次导出成功只是开始——真正的价值在你打开那些文件之后。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考