Asset Bundle 格式简析 您所在的位置:网站首页 assetbundle压缩 Asset Bundle 格式简析

Asset Bundle 格式简析

2023-10-16 17:58| 来源: 网络整理| 查看: 265

Asset Bundle 格式简析

文章目录 Asset Bundle 格式简析1. Header 信息2. BlocksInfo2.1 BlockInfo2.2 每个block信息3. 路径信息3.1 每个路径节点信息4. 数据 Unity 中,AssetBundle 可以理解成一个档案文件,其中包含了压缩的资源文件。用户在使用 AssetBundle 时,可以流式加载资源,用户可以以数据流的方式陆续地、按需地加载 AssetBundle 中资源的各个部分。可以用 Asset Studio 看下 Bundle 中的具体内容,比如我们打开一个 AB 包,看到一个 ScrollList_Equip_jinse 的资源,该资源下又挂了几个粒子系统。

简单说明 AssetBundle 是什么之后,下面开始介绍下中的数据具体是什么样的

1. Header 信息

跟其他格式的文件一样,Unity AssetBundle 会先写入头信息,写入标记、版本号、文件大小等信息。Unity AssetBundle 中的头信息如下所示。

image.png

数据二进制示例Unity标记,比如这里表示 UnityFSimage.pngArchive 的版本号,此处版本号为 6image.pngUnity Bundle 的版本号image.pngbundle所需的最小版本号这里使用的是 Unity2018.4.18f1 的程序进行打包,此bundle有效运行的最小版本号为 Unity2018.4.18f1image.png整个AssetBundle文件的大小(header + blocks/directory + data)此处,注意,使用大端序,比如此处文件的大小是 0x65fb,而不是 0xfb65image.png压缩的block数据大小此处,注意,使用大端序image.png未压缩的block数据大小此处,注意,使用大端序image.png压缩选项 ArchiveFlagsimage.png 2. BlocksInfo

在写完头信息后,开始写入 block(数据块) 信息,block 信息会保存所有数据块的压缩前的大小、压缩后的大小以及Flags。这部分数据,unity 默认使用 Lz4HC 进行压缩,这里解压缩这部分数据,以方便分析。

2.1 BlockInfo

首先会写入一个 Hash 值,以及有多少个 block。 即使只有一个文件,如果文件比较大,也会存成多个 Block,unity在开启流失加载的情况下,每个block的最大值是 128Kb。

数据二进制示例Block数据未压缩前的hashimage.pngblock 数量(大端序编写)image.png 2.2 每个block信息

每个 block 会有10个字节的数据,压缩前后的block大小 8 个字节,flags 有2个字节大小

数据二进制示例未压缩的block数据大小(大端序)示例中表示的大小为 0x01ccd8image.png压缩的block数据大小(大端序)示例中表示 0x6588image.pngFlags,比如 block 是不是 流式加载image.png 3. 路径信息

这部分存储的是每个子文件的路径。当然首先存储的是路径数量,本文示例中只有一个文件,数量为1。

数据含义二进制示例路径 数量_(大端序)_image.png 3.1 每个路径节点信息 数据二进制示例路径信息数据的位置,第一个文件路径节点,其值一定是 0 (大端序)image.png该节点未压缩数据的大小_(大端序)_image.png节点标志,如是否是一个路径,是否是 serialize文件…(大端序)如本例中,值为0x04,表示序列化的文件,而本例中确实是 material 文件image.png该节点对应的文件路径,比如CAB-3bdc32e90076da9198352f0261e7413cimage.png 4. 数据

之后存储的就是一个个文件数据了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有