Asset Bundle 格式简析 | 您所在的位置:网站首页 › assetbundle压缩 › Asset Bundle 格式简析 |
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 中的头信息如下所示。 数据二进制示例Unity标记,比如这里表示 UnityFSArchive 的版本号,此处版本号为 6Unity Bundle 的版本号bundle所需的最小版本号这里使用的是 Unity2018.4.18f1 的程序进行打包,此bundle有效运行的最小版本号为 Unity2018.4.18f1整个AssetBundle文件的大小(header + blocks/directory + data)此处,注意,使用大端序,比如此处文件的大小是 0x65fb,而不是 0xfb65压缩的block数据大小此处,注意,使用大端序未压缩的block数据大小此处,注意,使用大端序压缩选项 ArchiveFlags 2. BlocksInfo在写完头信息后,开始写入 block(数据块) 信息,block 信息会保存所有数据块的压缩前的大小、压缩后的大小以及Flags。这部分数据,unity 默认使用 Lz4HC 进行压缩,这里解压缩这部分数据,以方便分析。 2.1 BlockInfo首先会写入一个 Hash 值,以及有多少个 block。 即使只有一个文件,如果文件比较大,也会存成多个 Block,unity在开启流失加载的情况下,每个block的最大值是 128Kb。 数据二进制示例Block数据未压缩前的hashblock 数量(大端序编写) 2.2 每个block信息每个 block 会有10个字节的数据,压缩前后的block大小 8 个字节,flags 有2个字节大小 数据二进制示例未压缩的block数据大小(大端序)示例中表示的大小为 0x01ccd8压缩的block数据大小(大端序)示例中表示 0x6588Flags,比如 block 是不是 流式加载 3. 路径信息这部分存储的是每个子文件的路径。当然首先存储的是路径数量,本文示例中只有一个文件,数量为1。 数据含义二进制示例路径 数量_(大端序)_ 3.1 每个路径节点信息 数据二进制示例路径信息数据的位置,第一个文件路径节点,其值一定是 0 (大端序)该节点未压缩数据的大小_(大端序)_节点标志,如是否是一个路径,是否是 serialize文件…(大端序)如本例中,值为0x04,表示序列化的文件,而本例中确实是 material 文件该节点对应的文件路径,比如CAB-3bdc32e90076da9198352f0261e7413c 4. 数据之后存储的就是一个个文件数据了 |
CopyRight 2018-2019 实验室设备网 版权所有 |