BuildAssetBundleOption.DisableWriteTypeTree和粒度问题

一.BuildAssetBundleOption.DisableWriteTypeTree

 DisableWriteTypeTree的作用如下:

  • 在Unity 5.x版本中,AssetBundle在制作时会默认写入TypeTree信息,这样做的好处是可以保证AssetBundle文件的向下兼容性,即高版本可以支持以前低版本制作的AssetBundle文件。
  • 所以,如果开启DisableWriteTypeTree选项,则可能造成AssetBundle对Unity版本的兼容问题,虽然关闭TypeTree会使Bundle更小,但我们一般都不建议研发团队在制作AssetBundle文件时开启该选项。

1.内存占用大小对比: 

 对于同一个预制体EnableWriteTree和DisableWriteTypeTree其大小对比如下:

  •  开启WrietTypeTree:

  • 关闭WriteTypeTree:

  • 两者相差16K左右。而其asetbundle只是一个简单的预制体:

  • 结论一:关闭WriteTypeTree是可以很大一部分减少内存占用。

2.打出包体大小对比 

  LZMA格式下,大小差了3K。

  •   结论2:DisableWriteTypeTree能够减小包体的大小。

二.AssetBundle粒度问题

        测试中我们发现,对于一个简单的文本打成AssetBundle,其AssetBundle加载出来对应的序列化的信息也有15.4K。如下:

一个空的文本文件:

        打成AssetBundle后加载出资源,观察Profiler下SerializedField下的序列化信息(不包含WriteTree)的大小17.2K,比文件本身打了很多。

        为了减少冗余我们经常需要将资源的粒度约细越好,但是对于资源本身就很小,资源又特别多的文件,如多个文本配置、shader文件等 如果每个单独打包会造成上面序列化信息文件占用内存过大的问题。

  • 结论3:对于小而细且多的资源最好打在一起,一次性加载出来。如shader、lua脚本材质球、粒子系统等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值