AssetRipper 完整教程:3 步把 .assets 和 AssetBundle 变成可用的 Unity 资源
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
AssetRipper 是一款面向 Unity 资源提取的图形化工具:它能解析序列化文件(.assets、.sharedAssets)和 AssetBundle(.unity3d、.bundle),把里面的资源转换回 Unity 引擎原生格式,兼容 Unity 3.5.0 到 6000.2.X 版本。这篇教程的思路是"先跑通,再看细节"——第 2 节就能让你拿到一次真实的导出结果,后面的章节按资源类型拆开讲,最后是一份可直接对照的排错手册。
AssetRipper 能力清单:能提取什么,出来是什么形式
按你的需求跳读:只关心模型的直接看"模型与网格"小节,只关心脚本的看"脚本"小节。
| 文件类型 | 扩展名 | 说明 |
|---|---|---|
| 序列化文件 | .assets、.sharedAssets | Unity 序列化资产文件 |
| AssetBundle | .unity3d、.bundle | 打包的游戏资源 |
| CAB 文件 | CAB-* | 压缩的资产文件 |
| 场景文件 | .unity | Unity 场景文件 |
各类资源的输出形式:
- 模型与网格:默认导出 Native 网格格式,可直接在编辑器中使用,还能通过 Unity 包转换成其他格式。
- 纹理:默认 PNG 输出,包括法线贴图、立方体贴图等压缩格式的反压缩。
- Sprite:导出为 Unity 的 sprite 格式,注意这种格式只能在 Unity 里查看。
- 音频:大多数类型导出为 WAV,少数导出为 OGG。
- 地形:导出为 Unity 原生地形格式,适合之后重新导入。
- TextAsset:解析为纯文本,并尽量推断正确的扩展名(JSON 内容会拿到 .json)。
- 脚本:从程序集反编译出 C# 代码,Mono 游戏导出完整方法体,IL2CPP 游戏导出假方法(dummy methods)。
- 着色器、材质等:随项目一并导出到 Unity 项目结构中。
跑通第一次提取:安装与首次导出
系统要求如下,三个平台都提供官方安装包:
| 平台 | 最低要求 | 推荐配置 |
|---|---|---|
| Windows | Windows 10 x64 | Windows 11 x64 |
| macOS | macOS 10.15+ | macOS 12+ |
| Linux | Ubuntu 18.04+ | Ubuntu 22.04+ |
方式一:下载现成版本(推荐)。从官方发行版页面获取对应平台的压缩包(Windows/Mac/Linux 均分 x64 与 Arm64),解压后即可运行,详见 下载说明。macOS 上如果提示没有权限,给可执行文件加上执行权限:
chmod +x AssetRipper.GUI.FreemacOS 的完整授权流程(包括系统安全提示的处理)见 macOS 运行指南。
方式二:从源码构建(开发者)。需要安装 .NET 9 SDK,然后:
git clone https://gitcode.com/GitHub_Trending/as/AssetRipper.git cd AssetRipper dotnet build AssetRipper.sln -c Release第一次提取。拿到一个 .assets 文件后,一条命令就能完成解析和导出,--format unitypackage指定导出为 Unity 包格式:
AssetRipper.CLI --input "Game/Characters/player.assets" --output "Extracted/Player" --format unitypackage如果用的是 GUI 版本,把文件拖进窗口即可。导出前可以先在配置页选择各资源的输出格式,网格、音频、图像、Sprite、地形、文本和脚本内容级别都有独立选项:
整个处理流程可以概括为:
导出完成后去Extracted/Player里检查:网格是 Native 格式、纹理是 PNG、音频是 WAV——能直接在 Unity 里打开就说明流程通了。
按类型提取:模型、纹理、音频、脚本
模型与网格
- 怎么提:默认选项即可,网格格式选 Native;角色模型相关的 .assets 文件单独提一次,纹理文件一起提可以避免贴图丢失。
- 提出来是什么:带顶点、法线、UV、三角索引的 Native 网格,在 Unity 编辑器中可用,也可通过 Unity 包转成其他格式。
- 什么情况下会失败:模型引用了缺失的材质或着色器时会出现断引用;网格数据本身损坏时该对象会导出为空,日志里能看到对应报错。
纹理与 Sprite
- 怎么提:图像格式选 PNG(默认),Sprite 格式选 Unity。
- 提出来是什么:2D 纹理、法线贴图输出为 PNG 并保留通道信息;立方体贴图按面展开;Sprite 是 Unity 私有格式,编辑器外无法预览。
- 什么情况下会失败:压缩格式不受支持、平台特定的纹理设置、着色器依赖缺失这三类原因最常见,排查方法见下面排错手册。
音频
- 怎么提:保持音频导出格式为 Default 即可。
- 提出来是什么:大多数音频类型得到 WAV 文件,少数类型是 OGG。
- 什么情况下会失败:特殊压缩编码无法解码时会跳过该文件并在日志中记录,不影响其他音频导出。
脚本
- 怎么提:Mono 脚本不存放在 AssetBundle 里,而在 C# 程序集(.dll)中。必须把相关程序集和资源文件放在一个文件夹里,一起拖入 AssetRipper 导入。
- 提出来是什么:反编译出的 C# 源码;Mono 游戏(脚本内容级别 Level 2)导出完整方法体,IL2CPP 游戏只导出假方法。
- 什么情况下会失败:日志出现
Files use the 'Unknown' scripting backend说明程序集没带上;IL2CPP 游戏需要先用 Cpp2IL 生成程序集,Modding 用的 Il2CppInterop 程序集不兼容;被修改过的程序集(publicized、删过特性等)也几乎必然引发读取错误。
版本兼容性:哪些 Unity 版本解析得好
AssetRipper 的兼容范围是 Unity 3.5.0 到 6000.2.X,质量随版本变化:
- 3.5.0 到 4.x:基本功能完整。
- 5.x 到 2017.x:支持最好。
- 2018.x 到 2020.x:部分新特性可用。
- 2021.x 及之后:实验性支持。
一个实操原则:用来打开导出结果的 Unity 编辑器,版本要和目标游戏一致,至少要不低于游戏版本,详见 系统要求。
排错手册:症状 → 原因 → 动作
症状:Mono 脚本没有导出
- 可能原因:导入时没有包含程序集文件,脚本后端被识别为 Unknown。
- 处理动作:把全部相关 .dll 放入一个文件夹,连同 bundle 一起导入;成功时日志会显示
Files use the 'Mono' scripting backend。IL2CPP 游戏改用 Cpp2IL 生成的程序集,不要用修改版。
症状:Could not add pe assembly to name dictionary!
- 可能原因:Managed 文件夹(含子文件夹)里存在两个"程序集名"相同的程序集——注意这里比的是反编译器里显示的程序集名,不是文件名。
- 处理动作:找出重名的两个程序集,移除多余的那个,保证名称唯一。
症状:纹理显示异常(缺色、法线错乱)
- 可能原因:压缩格式不支持、平台特定纹理设置、着色器依赖缺失。
- 处理动作:打开详细日志定位具体文件:
AssetRipper --verbose --input "texture.assets" --output "debug_output"症状:Too many open files(Linux)
- 可能原因:系统文件句柄上限设置过低。
- 处理动作:在同一终端先执行下面命令再启动 AssetRipper:
ulimit -n 1048576需要永久生效时修改/etc/security/limits.conf。更多案例见 常见问题。
进阶速览:批量处理、性能、自定义导出
- 批量处理:把多个文件塞进一个循环即可,参数与单次提取相同:
for f in *.assets; do AssetRipper.CLI --input "$f" --output "out/$f" --quiet; done- 性能:大项目建议分批导入而不是把所有文件一次性拖进去;解析阶段走的是内存映射读取和多线程处理,瓶颈通常在磁盘 IO。
- 自定义导出:导出层基于
IAssetExporter接口组织,判断"能不能导出"和"怎么导出"是两个独立方法,想加自己的输出格式时参考 导出模块源码 和 文件格式处理源码。
接下来做什么
- 换一类文件试一次:把一个 .unity 场景文件和一个 .unity3d bundle 分别跑一遍,对比导出结构。
- 通读 下载与版本说明 和 系统要求,确认你手上的 Unity 编辑器版本和游戏版本匹配。
- 关注发行版更新:预发布版本带有实验性功能,稳定版适合日常使用;遇到解析不了的版本,先查 常见问题 再提 issue。
- 处理前把原始 .assets、.bundle 和 Managed 文件夹留一份备份——导出过程只读输入,但删错的往往是你自己导出的中间结果。
【免费下载链接】AssetRipperGUI application to analyze game files项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考