ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AssetStudio 使用与构建完整指南:Unity 资源与 AssetBundle 的探索、提取与导出实战手册

AssetStudio 使用与构建完整指南:Unity 资源与 AssetBundle 的探索、提取与导出实战手册 开发工具游戏开发【免费下载链接】AssetStudioAssetStudio is a tool for exploring, extracting and exporting assets and assetbundles.项目地址https://gitcode.com/gh_mirrors/as/AssetStudio点击查看免费下载AssetStudio 是一款面向 Unity 开发者、逆向分析者与资源研究人员的图形化工具用于探索、提取并导出 Unity 资源Assets与资源包AssetBundle。本文以仓库根目录的 README.md 为核心骨架结合 AssetStudio 核心源码、AssetStudioGUI 界面实现与 AssetStudioUtility 转换模块系统讲解其支持范围、运行环境、加载/提取/导出全流程、MonoBehaviour 反序列化方案以及从源码构建的完整方法让读者既能按图索骥完成实际操作也能理解每一步背后的文件解析与转换原理。一、工具定位与功能总览AssetStudio 的核心能力是读取 Unity 序列化文件.assets与 AssetBundle 文件将其中的资源对象解析为结构化数据并转换为通用格式导出。需要特别说明的是该工具与 Unity Technologies 及其关联公司没有任何隶属或授权关系其作者Perfare独立维护该开源项目使用者应自行确认合规边界。从 AssetStudio/AssetStudio.csproj 可以看到当前仓库版本为0.16.0.0Copyright © Perfare 2018-2022且工程面向多目标框架编译net472;netstandard2.0;net5.0;net6.0这也决定了运行与构建时的环境要求。1.1 支持版本范围按 README 声明AssetStudio 支持Unity 3.4 至 2022.1之间生成的资源文件。版本适配主要体现在 AssetStudio/SerializedFile.cs 对序列化文件头SerializedFileHeader.cs与版本相关字段的解析逻辑上不同 Unity 版本在元数据布局、字节序与字段格式上存在差异工具通过版本分支逐一兼容。1.2 支持导出的资源类型与格式README 给出的资源类型支持矩阵如下这也是导出菜单中各转换器见 AssetStudioGUI/Exporter.cs的完整清单资源类型支持导出格式对应导出实现Texture2Dpng、tga、jpeg、bmpExportTexture2D底层走ConvertToImage见 AssetStudioUtility/Texture2DConverter.csSprite按 Texture2D 裁剪后导出 png、tga、jpeg、bmpExportSpriteAudioClipmp3、ogg、wav、m4a、fsb支持将 FSB 转换为 WAV(PCM)ExportAudioClip底层为 AssetStudioUtility/AudioClipConverter.csFontttf、otfExportFontMeshobjExportMeshTextAsset原始文本/二进制ExportTextAssetShadershader转换后文本ExportShader底层见 AssetStudioUtility/ShaderConverter.csMovieTextureogvExportMovieTextureVideoClip按原始路径扩展名ExportVideoClipMonoBehaviourjsonExportMonoBehaviour底层见 AssetStudioUtility/MonoBehaviourConverter.csAnimator导出为绑定 AnimationClip 的 FBX 文件ExportAnimator底层见 AssetStudioUtility/ModelConverter.cs从源码结构看AssetStudioGUI/Exporter.cs 中的ExportConvertFile是转换导出的统一分发入口它会依据资源类型ClassIDType将任务派发给上述各专用导出方法同时还有ExportRawFile导出原始字节扩展名.dat与ExportDumpFile导出类型结构转储文本扩展名.txt两条不经过转换的旁路。二、运行环境与版本选择README 明确列出了三种目标框架对应的运行依赖这与其 csproj 的多目标框架设置一一对应AssetStudio.net472需要 .NET Framework 4.7.2 运行时AssetStudio.net5需要 .NET Desktop Runtime 5.0AssetStudio.net6需要 .NET Desktop Runtime 6.0。需要说明的是net472 版本在依赖上与其他框架有所差异由 AssetStudio/AssetStudio.csproj 可见非 net472 目标引用K4os.Compression.LZ41.2.16而 net472 目标引用 1.1.11并额外引入System.Memory与System.IO.Compression包以保证在旧框架上获得等价的流与内存能力。选择建议在较新的 Windows 10/11 上优先使用 net6 版本运行时支持最长久在仅装有旧版 .NET Framework 的机器上使用 net472 版本。运行时与工具版本不匹配时程序将无法启动。三、加载资源与 AssetBundle3.1 两种加载方式README 给出的基本用法为File → Load file加载单个或多个资源文件File → Load folder加载整个文件夹递归扫描所有子目录。对应的界面实现在 AssetStudioGUI/AssetStudioGUIForm.cs 的loadFile_ClickL141-L152与loadFolder_ClickL154-L166中。此外界面还支持拖拽加载将文件或文件夹拖入窗口时单个文件夹走LoadFolder多个文件走LoadFilesL122-L139。底层核心在 AssetStudio/AssetsManager.csLoadFiles先对文件所在目录执行MergeSplitAssets自动合并分片文件再经ProcessingSplitFiles过滤分片最后进入统一加载流程LoadFolder递归获取目录下全部文件同样先合并分片再加载。加载主循环LoadFileL71-L94会根据 AssetStudio/FileReader.cs 中CheckFileType识别的文件类型分派处理AssetsFile直接解析序列化文件BundleFile解包 AssetBundleWebFile解析 UnityWeb 数据文件GZipFile/BrotliFile先解压再递归处理ZipFile按压缩包解析。其中 GZip 与 Brotli 解压逻辑位于 AssetStudio/ImportHelper.cs。3.2 文件类型自动识别原理AssetStudio/FileReader.cs 通过文件魔数magic完成类型判定这也是把文件扔进 AssetStudio 就能自动处理的实现依据前 20 字节字符串为UnityWeb/UnityRaw/UnityArchive/UnityFS→BundleFile为UnityWebData1.0→WebFile头部两个字节为1f 8b→ GZip 文件0x20偏移处 6 字节为brotli→ Brotli 文件通过IsSerializedFile校验序列化文件头元数据大小、文件大小、数据偏移、字节序与版本字段的一致性→AssetsFile魔数为50 4b 03 04或50 4b 07 08→ Zip 文件其余归为ResourceFile原始资源文件。3.3 关于内存占用的重要提示README 特别提醒AssetStudio 加载 AssetBundle 时会在内存中直接解压并读取对于大体积 Bundle 可能造成可观的内存占用。这一点在 AssetStudio/BundleFile.cs 的CreateBlocksStream等实现中得到印证——解压后的整块数据流驻留于内存。推荐的缓解方式是先用File → Extract file或File → Extract folder将 AssetBundle 解包到磁盘文件夹再对该文件夹执行加载从而避免在内存中反复保留压缩与解压两套数据。四、提取 / 解压 AssetBundle使用File → Extract fileL168-L182或File → Extract folderL184-L199选择保存目录后即可将 Bundle 内嵌文件原样导出到磁盘。提取的底层实现在 AssetStudioGUI/Studio.csExtractFile依据FileReader.FileType分支处理BundleFile走ExtractBundleFileWebFile走ExtractWebDataFileL72-L83解包结果统一输出到保存目录/原文件名_unpacked子目录其中_unpacked命名由Path.Combine(extractPath, reader.FileName _unpacked)生成L85-L109ExtractFolder会递归处理文件夹内所有文件并保持原始目录结构映射到保存目录L43-L57。关于解压本身AssetStudio/BundleFile.cs 定义了完整的压缩体系ArchiveFlags中的CompressionTypeMask描述压缩类型CompressionType枚举覆盖None、Lzma、Lz4、Lz4HC、Lzham五种其中 LZ4/LZ4HC 依赖 csproj 中引用的K4os.Compression.LZ4包LZMA 则由仓库自带的 AssetStudio/SevenZipHelper.cs 与 7zip 目录下的纯 C# LZMA 解码器7zip/Compress/LZMA/LzmaDecoder.cs支撑。此外README 中加载文件夹时自动合并分片的行为由 AssetStudio/ImportHelper.cs 的MergeSplitAssets与ProcessingSplitFiles实现工具会扫描*.split0等分片文件按序拼接为完整文件后再加载因此分片 Bundle 无需手动合并。五、导出资源Export 菜单5.1 三种导出模式从 AssetStudioGUI/Studio.cs 的枚举定义与 AssetStudioGUI/AssetStudioGUIForm.cs 的菜单接线可以看出导出菜单由过滤范围 × 导出模式两维组合而成导出模式ExportTypeConvert转换按资源类型转换为标准格式png、obj、json 等即 README 功能表中的各类格式Raw原始导出资源原始字节数据.dat不做任何转换Dump转储导出资源类型结构树文本.txt用于查看对象字段布局。过滤范围ExportFilterAll导出 Asset List 中全部可导出资源Selected仅导出当前选中的资源Filtered仅导出当前类型过滤器下可见的资源。5.2 导出目录组织规则AssetStudioGUI/Studio.cs 的ExportAssets依据设置项assetGroupOption在 ExportOptions 面板中配置决定导出目录的组织方式按类型名Type name保存路径/资源类型名/...按容器路径Container path使用资源的 AssetBundle 容器路径组织目录无容器时直接落在保存路径下按源文件Source file保存路径/源文件名_export/资源名...使导出结果与原始加载文件对应。5.3 各类资源导出实操要点Texture2D / Sprite转换时通过ConvertToImage(true)生成位图再按所选图像格式编码png/tga/jpeg/bmpAudioClip优先尝试转换为 wav依据资源编码类型也可直接抽取 mp3/ogg/m4a/fsb 等原始流FSB 文件可进一步转为 WAV(PCM)Mesh导出为 Wavefront obj 格式适用于大多数 DCC 工具导入MonoBehaviour导出为缩进格式的 json需要配合程序集才能完成字段还原详见第七节。六、模型与动画导出Model 菜单模型导出以Scene Hierarchy场景层级树为操作入口README 给出了四条标准路径从 Scene Hierarchy 导出模型选中场景对象后使用Model菜单即可将对象及其子对象层级导出为 FBX从 Asset List 导出 Animator在 Asset List 中选中 Animator 资源使用Export菜单导出带动画的模型导出先在 Scene Hierarchy 选中模型再从 Asset List 选中 AnimationClip使用Model → Export selected objects with AnimationClip带动画的 Animator 导出导出的 Animator 会绑定其引用的 AnimationClip也可以按住Ctrl在 Asset List 中同时选中 Animator 与 AnimationClip使用Export → Export Animator with selected AnimationClip手动指定动画。对应的界面逻辑见 AssetStudioGUI/AssetStudioGUIForm.csexportAnimatorwithAnimationClipMenuItem_Click会先从 Animator 的预加载数据中收集 AnimationClipexportObjectswithAnimationClipMenuItem_Click则从当前选中项中筛选 AnimationClip 并传入模型导出。底层统一由 AssetStudioGUI/Exporter.cs 的ExportAnimator/ExportGameObject/ExportGameObjectMerge构造ModelConverter可传入 AnimationClip 数组再经ExportFbx调用 AssetStudioUtility/ModelExporter.cs 的 FBX 导出实现可选欧拉角滤波eulerFilter与滤波精度filterPrecision参数。FBX 导出链路由三部分组成托管侧 AssetStudioFBXWrapperFbx.cs / FbxExporter.cs负责 API 封装P/Invoke 层 AssetStudio.PInvoke 负责 DllLoader 加载原生库原生侧 AssetStudioFBXNative基于 Autodesk FBX SDK 的 C 实现含 skin/morph/anim 三个上下文模块负责最终写盘。七、导出 MonoBehaviour程序集反序列化7.1 常规 Mono 程序集README 说明当第一次选中 MonoBehaviour 类型资源时AssetStudio 会要求指定程序集所在目录例如 Unity 游戏的Managed文件夹。该行为背后是 AssetStudioUtility/AssemblyLoader.cs 的Load方法它会扫描目标目录下的所有*.dll借助 Mono.Cecil 的AssemblyDefinition.ReadAssembly读取每个程序集模块并通过自定义的MyAssemblyResolverAssetStudioUtility/MyAssemblyResolver.cs解析依赖。之后反序列化时GetTypeDefinition依据资源引用的程序集名与类型全名定位对应的TypeDefinition从而将原始二进制字段映射为可读的 C# 类型结构并序列化为 json。注意GetTypeDefinition中有一个特例当目标为UnityEngine.dll时会在已加载的所有模块中兜底搜索类型L34-L53。7.2 Il2Cpp 场景对于 Il2Cpp 打包的游戏原生没有可供读取的托管程序集。README 给出的标准流程是使用另一款工具Il2CppDumper生成假 dlldummy dll——该工具会从 Il2Cpp 全局元数据global-metadata.dat中还原出与原始程序集同名同结构的托管程序集在 AssetStudio 选择程序集目录时选中dummy dll 所在文件夹之后即可像常规 Mono 游戏一样完成 MonoBehaviour 的 json 导出。7.3 程序集缓存管理已加载的程序集在切换工程时可被清空界面层通过assemblyLoader.Clear()L1222释放所有ModuleDefinition避免跨工程加载时类型定义互相污染。八、从源码构建README 给出了构建的硬件/软件前提Visual Studio 2022 或更新版本仓库提供 AssetStudio.sln 解决方案文件可直接打开原生 FBX 导出项目AssetStudioFBXNative 依赖 FBX SDK 2020.2.1构建前需先安装该版本的 Autodesk FBX SDK然后修改项目文件AssetStudioFBXNative.vcxproj将 include 目录与 library 目录指向本机 FBX SDK 的实际安装位置。构建产物按目标框架产出多个版本net472 / net5.0 / net6.0与 README 运行环境一节对应。若只使用纹理、音频、模型等不依赖 FBX 的导出功能也可按需裁剪 FBX 相关项目。九、开源依赖说明README 末尾列出的开源库集中在纹理解码领域Texture2DDecoder 模块仓库内对应 Texture2DDecoderNative 与 Texture2DDecoderWrappermikunyanUnity 序列化与资源解析参考实现为理解 Unity 二进制格式提供重要依据BinomialLLC/crunchCrunch 纹理压缩格式的解码基础Unity-Technologies/crunchUnity 定制分支的 crunch 解码实现仓库内对应 Texture2DDecoderNative/unitycrunch 与 Texture2DDecoderNative/crunch 两个子目录。此外压缩体系还依赖K4os.Compression.LZ4LZ4/LZ4HC 解压见 csproj 包引用与仓库自带的7zip LZMA纯 C# 实现7zip 目录。十、使用建议与注意事项内存管理加载大型 AssetBundle 时优先先提取到磁盘、再加载文件夹避免整包驻留内存程序集目录MonoBehaviour 导出前务必准备好正确的Managed目录或 Il2CppDumper 生成的 dummy dll 目录否则字段无法正确还原版本兼容工具声明支持 Unity 3.4–2022.1超出该范围的资源格式可能存在解析失败可尝试在界面的版本输入框中指定 Unity 版本辅助识别导出格式选型需要可编辑模型时使用 FBX含动画仅需几何数据时 obj 更轻量音频中 FSB 转 WAV 可显著提升通用性合规边界AssetStudio 与 Unity Technologies 无任何官方关联请仅在授权范围内使用本工具处理资源。通过以上各节读者应已掌握 AssetStudio 从环境准备、资源加载、Bundle 提取、资源/模型/动画导出到 MonoBehaviour 反序列化与源码构建的完整技术路径如需深入源码可重点研读 AssetStudio/AssetsManager.cs、AssetStudio/BundleFile.cs、AssetStudio/FileReader.cs 三条主线它们共同构成了工具识别文件 → 解压解码 → 结构化解析的核心链路。赞分享开发工具游戏开发【免费下载链接】AssetStudioAssetStudio is a tool for exploring, extracting and exporting assets and assetbundles.项目地址https://gitcode.com/gh_mirrors/as/AssetStudio点击查看免费下载相关推荐AssetStudio完整使用指南Unity游戏资源提取与导出的实战教程AssetStudio完整使用指南Unity游戏资源提取与导出的实战教程 想要从Unity游戏中提取精美的纹理、模型和音频资源吗AssetStudio作为一开发工具游戏开发AssetStudio资源探索工具完全指南Unity资源提取与AssetBundle解包神器AssetStudio资源探索工具完全指南Unity资源提取与AssetBundle解包神器 AssetStudio是一款强大的Unity资源浏览、提取和导出开发工具游戏开发AssetStudio完全实战Unity资源提取与AssetBundle解包的终极教程AssetStudio完全实战Unity资源提取与AssetBundle解包的终极教程 AssetStudio是一款功能强大的开源工具专为Unity资源提取开发工具游戏开发上一篇NHSE5分钟掌握《动物森友会》存档编辑的完整指南下一篇NHSE动物森友会存档编辑的终极指南 - 如何快速打造梦想岛屿创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进