AssetRipper:Unity 资源提取的最短路径,3步把模型、贴图和脚本全部导出来
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
手里有个打包好的 Unity 游戏,或者一堆 AssetBundle,想把里面的模型原样拿回来,把脚本变成能读的 C# 代码——AssetRipper 就是干这件事的。它是一个开源的图形界面工具,专门解析 Unity 游戏文件,支持的版本跨度从 3.5 一直到 6000 系列的新版本号。不用写命令行:打开、选文件、导出。
第一次启动时你看到的就是这个窗口。所有影响导出结果的选项都集中在这里,后面会逐个讲。
📦 AssetRipper 替你省下的手工活
AssetRipper 接收三类输入:SerializedFile(.assets / .resource)、AssetBundle(.bundle)和游戏可执行文件本身。加载后它会把资产图还原出来——GameObject、组件、材质、引用关系都能展开看,再让你按类型导出成可用文件。
它适合三类人:怀疑构建包里混进了测试资产、需要核对依赖的开发;想把游戏里的模型贴图带回编辑器二次使用的人;想确认构建里到底留下了哪些代码的逆向工程师。它替代的手工活包括:手解 bundle 文件头、解码 FSB 音频容器、逐个反编译托管程序集。
🚀 三步跑通:从程序到导出结果
1. 拿到程序
官方 release 按 Windows、macOS、Linux 三个系统各给一个包,解压后就是这种结构:主程序 AssetRipper、一批运行时依赖库(IL2CPP 相关、FFMpeg、Texture2DDecoder)、Licenses 目录。双击主程序即可启动。
如果要从源码运行,先克隆仓库再构建:
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper2. 导入目标文件
顶部菜单 File 里选择目标文件,支持多选:.bundle、.assets,或者直接选一个文件夹。程序会把识别出的资产列成树,可以按路径展开定位,确认加载的是你预期的那部分内容。
3. 导出
指定导出目录,执行 Export。结果按资产类型分目录落盘:模型在 Models、贴图在 Textures、脚本是一组 .cs 文件、音频在 Audio。这一步结束,最小流程就走完了。
📐 把 3D 模型原样导出
做什么:让 Mesh 回到能直接进编辑器的状态,顶点数据不丢失。
怎么设置:Mesh Export Format 保持默认 Native。界面上的说明很直白:这个格式是拿来在编辑器里直接用的,想转成别的格式要靠编辑器生态里的包。
结果长什么样:Models 目录下生成原生网格资产,重新导入 Unity 即可使用;如果你的目标是别的引擎,需要再走一步格式转换。
📜 拿到反编译的 C# 脚本
做什么:把构建里的托管代码变成可读的 .cs 文件。
怎么设置:Script Content Level 保持默认 Level 2。对 Mono 游戏,它导出完整方法体;对 IL2Cpp 游戏,方法体在构建期就被剥离了,Level 2 只能拿到方法签名(dummy 方法)。做 IL2Cpp 脚本反编译时要有这个预期——信息在构建阶段就没了,不是导出失败。
结果长什么样:Scripts 目录下按命名空间组织的反编译 .cs 文件,可以核对哪些逻辑被内联、哪些代码残留在包里。
🔊 把音频资源救回来
做什么:从 FSB 声音库里把音效和音乐解出来。
怎么设置:Audio Export Format 的默认值 Default 按源文件的原始压缩格式导出,通常是 OGG;如果目标是直接在编辑器里用,改成 PreferWav,会尽量转成 WAV。
结果长什么样:Audio 目录下的文件可以直接播放,扩展名和真实格式一致。
⚙️ 关键配置:真正影响结果的就这几个
- Script Content Level(默认 Level 2):Level 0/1 导出的内容更少,Level 3 只在付费版可用。多数场景 Level 2 够用:Mono 游戏拿到完整方法体,IL2Cpp 游戏再调高也没有更多信息。
- Sprite Export Format(默认 Unity):这个格式只能在 Unity 里查看。如果你的目的是用看图软件直接打开,就换成图片格式,否则导出后打不开。
- Ignore Asset Bundle Content Paths / Skip StreamingAssets Folder:两个减载用的复选框。项目里混着大量测试包或更新补丁包、你只关心主内容时,勾上它们能明显加快加载。
代码组织速览
想读源码的话,四个目录足够建立心智地图:
- Source/AssetRipper.Assets/:资产模型和遍历逻辑,回答"一个资产在内存里怎么表示、怎么顺着引用找到它关联的东西"。
- Source/AssetRipper.IO.Files/:bundle、序列化文件等格式的读取实现,回答"文件里的字节怎么变成结构"。
- Source/AssetRipper.Export/:导出调度与格式转换,回答"模型、贴图最终怎么落成能存盘的文件"。
- docs/:API 与使用文档,比直接翻源码找答案快。
排坑清单
- 现象:导出目录是空的,或个别文件缺失。原因:目标文件被正在运行的游戏占用,或系统给不了读权限。对策:先把文件复制一份到别处再导入,别对着游戏安装目录操作。
- 现象:大型游戏加载极慢甚至崩溃。原因:默认会解析整个 StreamingAssets,资源量越大越吃力。对策:勾上 Skip StreamingAssets Folder 和忽略路径,按目录分批导出。
- 现象:IL2Cpp 游戏导出的脚本只有签名没有方法体。原因:方法体在构建期被剥离,不是导出环节丢了。对策:需要完整逻辑只能换 Mono 构建,或者基于签名层推断行为。
- 现象:导出的 Sprite 在看图软件里打不开。原因:Sprite Export Format 默认是 Unity 格式,只能在编辑器内查看。对策:用途是直接查看的话,把格式改成 PNG。
收尾
AssetRipper 最适合的场景就三个:核对构建内容、提取资产复用、确认构建残留代码。想深入的话,从 docs/ 目录的文档开始读最省时间;使用过程中的问题可以在项目的 Issue 区和社区 Discord 里交流。跑通一个游戏之后,下一个会快得多。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考