Unity 版本指定 — CLI --unity-version 和 GUI 里的版本选择
什么时候需要指定 Unity 版本
AssetStudio 加载 AssetBundle 时,会先读 AssetBundle 文件头里的 UnityVersion 字段。绝大多数情况下这个字段是准确的——AssetStudio 直接用它来选 TypeTree 和数据格式。
但以下情况可能需要手动指定版本:
| 情况 | 原因 |
|---|---|
| AssetBundle 里的 UnityVersion 写着 0.0 或乱码 | 压缩 / 加密后损坏了版本字段 |
| 跨版本打包(比如用 Unity 2022 打包但写成 2018) | 部分厂商为了兼容性故意写低版本 |
| Unity 6 / Unity 6000+ 的资源 | 原版 AssetStudio 不支持,AssetStudioMod 默认可能识别错 |
| 团结引擎(Tuanjie)游戏 | 国内引擎分叉,AssetBundle 版本字段可能不规范 |
CLI 方式(AssetStudioMod 独有)
AssetStudioModCLI <asset folder path> --unity-version 2017.4.39f1
版本号格式是 Unity 的完整版本号(主版本.次版本.补丁版本f构建号)。常用版本号参考:
| Unity 版本 | 版本号示例 |
|---|---|
| Unity 5.6 | 5.6.7f1 |
| Unity 2017.4 LTS | 2017.4.39f1 |
| Unity 2018.4 LTS | 2018.4.36f1 |
| Unity 2019.4 LTS | 2019.4.43f1 |
| Unity 2020.3 LTS | 2020.3.48f1 |
| Unity 2021.3 LTS | 2021.3.31f1 |
| Unity 2022.3 LTS | 2022.3.20f1 |
| Unity 6 | 6000.0.23f1 |
GUI 方式
AssetStudioMod GUI 在 Options 菜单里提供了 Unity version override 选项(原版没有)。打开后可以输入版本号,AssetStudio 在加载 AssetBundle 时会用这个版本代替文件头里读到的版本。
指定版本后解析会发生什么
AssetStudio 的 TypeTree 解析器按 Unity 版本号来选字段布局——每个 Unity 版本都有自己的内置类型定义(比如 Texture2D.m_TextureFormat 在不同版本里位置不一样)。指定版本后,AssetStudio 会强制用那个版本的 TypeTree 去反序列化。
指定版本不保证能解析——如果这个 AssetBundle 里真有那个版本之后才出现的新字段,指定了老版本号还是会解析失败。但如果只是版本字段写得不准,指定正确版本就能解出来。
版本号怎么找
如果不确定这个游戏用什么 Unity 版本打包的:
- 解压 APK,看
assets/bin/Data/global-metadata.dat里的版本字符串; - 用 AssetStudioMod CLI 不加
--unity-version先跑一次-m info,看它自动识别的版本; - 不行就从游戏版本发布时间反推(2023 年的游戏大概率 Unity 2022 LTS,2024 年的大概率 Unity 2022 或 Unity 6)。