AssetRipper 上手:从 Unity 游戏文件中提取网格、贴图与脚本
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款开源的 Unity 游戏文件分析工具,支持 GUI 拖拽操作,也支持通过本地 Web API 调用。它能读取 AssetBundle、序列化文件和 C# 程序集,把资产转换成可重新导入的 Unity 工程格式,或 GLB、PNG、WAV 这类通用格式。游戏开发者拿它审查自己的构建产物,逆向工程师拿它恢复资产、反编译脚本,官方支持 Unity 3.5.0 到 6000.5.X 的版本范围。
能力全景
提取网格、贴图与音频
- 网格导出为 Native 格式,可直接在 Unity 编辑器中导入使用
- 贴图默认导出 PNG,Sprite 和 Terrain 各有独立选项,UV 与材质引用关系保持完整
- 音频按内容类型嵌入导出,多数类型输出 WAV,部分是 OGG
反编译 Mono 与 IL2Cpp 脚本
- Mono 游戏导出完整的方法实现
- IL2Cpp 游戏需先用 Cpp2IL 生成程序集,AssetRipper 输出兼容接口与 dummy 方法体
- C# 语言版本可指定,自动适配目标项目的规范要求
Web 界面与本地 API
- 启动后自动打开 127.0.0.1 的本地页面,所有操作走 HTTP 端点
- 内置 Swagger 接口文档,端点可直接用于脚本化
- 支持 headless 模式,方便接入自动化流程
获取与运行
预编译包(多数人推荐):官方发布渠道提供 Windows x64/Arm64、macOS x64/Arm64、Linux x64/Arm64 的 zip 包,解压即用,无需构建环境。包内包含主程序、SkiaSharp 等原生依赖库和许可文件:
源码构建:需要 .NET 10 SDK(仓库锁定 net10.0)。
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper cd AssetRipper dotnet build AssetRipper.slnx dotnet run --project Source/AssetRipper.GUI.Free容器部署:仓库未自带 Dockerfile。如果要在 CI 中固化环境,建议把预编译包打进自维护镜像,用 headless 参数启动主程序并固定端口,供流水线通过 API 调用。
典型任务演示
场景一:从游戏包提取完整 Unity 工程
- 收集目标文件:
Assets/下所有 AssetBundle,加上完整Managed/目录;IL2Cpp 游戏先跑 Cpp2IL 生成程序集 - 把文件夹和 assetbundle 同时拖入 AssetRipper,日志出现
Files use the 'Mono' scripting backend即识别成功 - 首次启动的配置页里逐项指定格式:网格 Native、图像 PNG、文本资产 Parse
- 点击 Export,目标选 Unity Project,指定输出目录
- 完成后得到可直接用 Unity 打开的目录,顺带核对断引用日志
首次启动的导出配置页把网格、音频、图像、Sprite、地形、文本资产、脚本内容级别和 C# 版本集中在一个界面里,可按项目需求逐项调整:
场景二:只导出主要资源内容
- 按场景一加载文件
- Export 时选 Primary Content 而不是 Unity Project
- 网格出 GLB、图像出 PNG、音频出 WAV,输出为扁平目录
- 适合不想开 Unity、只做归档或入库 3D 素材的流程
场景三:用本地 API 脚本化
- 启动主程序,记下 127.0.0.1 上的端口
- POST
/LoadFile传入文件路径完成加载 - POST
/Export/UnityProject或/Export/PrimaryContent触发导出,完整端点清单见内置 Swagger 页面
配置调优与常见坑
版本支持范围(官方说明:不同版本支持质量略有差异):
| Unity 版本区间 | 状态 | 说明 |
|---|---|---|
| 3.5.0 – 5.x | 支持 | 全范围内支持,老版本测试覆盖较少 |
| 2017 – 2022 LTS | 支持 | 主流游戏版本,兼容性最稳 |
| 2023+ – 6000.5.X | 支持 | 较新游戏建议用最新版 AssetRipper |
常见问题,按「症状 → 原因 → 解决」排查:
- Bundle 提取后没有脚本→ Mono 脚本存在 .dll 程序集里而不是资产包内 → 把 Managed 目录整个和 bundle 一起拖入
- 日志报
Could not add pe assembly to name dictionary!→ Managed 目录或子文件夹里有两个同名程序集(按程序集名而非文件名) → 定位后删除重复项 - MonoBehaviour 读取错误或反序列化异常→ 程序集被修改过,比如 publicize 或去掉了特性 → 换回原始程序集,publicize 会直接改变字段反序列化结果
- Linux 报
Too many open files→ 系统文件句柄上限过低 → 先在同一终端执行ulimit -n 1048576再运行程序,永久生效改 /etc/security/limits.conf
完整清单见 常见问题文档。
原理与扩展
- 模块分层清晰:
AssetRipper.IO.Files负责文件读取与虚拟文件系统,AssetRipper.Assets定义资产模型,AssetRipper.Import做解析,AssetRipper.Export产出结果,AssetRipper.Processing处理场景、动画等二级加工 - 导出分两路:UnityProjects 出完整工程,PrimaryContent 出主要资源,二者都通过 IExportCollection 接口挂进 ExportHandler 栈
- 扩展新导出格式 = 实现一个 ExportCollection 加一个 ContentExtractor,不用动核心解析逻辑
- GUI 本身是 ASP.NET 本地 Web 应用,页面操作与 HTTP 端点一一对应,天然可脚本化
- 全仓库启用 AOT 兼容并大量使用源生成器,编译和运行都比较轻
适用人群与选型建议
适合谁:
- 游戏开发者:审计构建产物里的依赖冗余、断引用和无法裁剪的脚本
- 逆向工程师 / Mod 开发者:恢复游戏资产、反编译 C# 代码
- 流水线工程师:通过本地 API 在 CI 里批量转换游戏包
什么时候选它:需要「资产 + 脚本」一起提取并重新导入 Unity 验证,或者要批量处理多个游戏包时,它的完整度很难被替代。
什么情况不建议用:
- 只想转一张贴图或一段音频,任何通用格式转换器都更轻
- 想修改 IL2Cpp 游戏的运行时逻辑,AssetRipper 只做静态分析与导出,运行时改造需要别的框架
- 目标 bundle 有加密或自定义容器时,先解密再交给 AssetRipper 才有意义
预编译包的具体下载入口与各版本说明,可查仓库内的 下载页面。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考