Unity资源Tree-AssetBundle内部细节

1 工具介绍

在Unity安装目录EditorDataTools下有许多可用的命令行工具,这里介绍两个跟AssetBundle有关的工具!

1.1 WebExtract.exe

该工具可以将普通的AB解开为一个 CAB-<GUIDString> 的二进制文档;也可以将Scene的AB解开为 BuildPlayer-<SceneName> 和 BuildPlayer-<SceneName>.sharedAssets的二进制文档。BuildPlayer-<SceneName> 和 CAB-<GUIDString> 对应的就是 Profiler分析器 里面 Others/SerializedFile 里面的名字,还有一些后缀为 .resS 的文件。 用命令行操作一下

image_thumb[2]

得到三个版本信息和Size信息。然后会得到同目录下生成同名目录,里面是个二进制文件

image_thumb[4]

Size大小由AB包的header+chunk block+stream block组成。假如要加载一个AB内某个资源,要先读取header里该资源所在的chunk,然后再解压再加载。

image

1.2 binary2text.exe

cmd命令:binary2text.exe inputbinaryfile [outputtextfile] [-detailed] [-largebinaryhashonly] [-hexfloat]

image_thumb[30] 带参数和不带参数,

outputtextfile命令可选,不写就在同目录

_detailed参数image_thumb[29]

_hexfloat参数能够准确显示Transform的浮点精度,假如一个prefab的transform某些数据变了打包的时候它的包体也会变!

image  image

2 AB包内部格式

image

3 SerializedFile信息

AssetBundle的SerializedFile是包体的头信息,记录了一个包体加载出来所必须的重建信息。仅仅是从磁盘加载该包体的头信息。

影响内存SerializedFile大小的几项:

  • 每开一个Bundle就有一个固定的14k内存占用。
  • 包体TypeTree信息也有大小。
  • 一个包如果有外部引用,2018之前的版本会固定分配一个72k大小存储External References信息。
  • 一个包内的Objects数量大小也有关。

能做的事情就是DisableWriteTypeTree,然后更新版本。

原文地址:https://www.cnblogs.com/baolong-chen/p/13414296.html