AssetBundle打包与加载

Unity中Assetbunlde打包方式

1. AssetBundle原理

AssetBundle是Unity中的一种资源包,可以在运行时动态加载实现资源更新的功能
使用AssetBundle可以解决的问题是:

1.1 实现资源的热更。
1.2 减少初始包体大小,资源分包处理。
1.3 可以利用二进制文件做资源加密。

2. AssetBundle压缩

AssetBundle压缩主要为 lzma和lz4的压缩以及不压缩,对应代码为:
BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。
BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。
注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。

2.1 文件大小和下载速度。lzma的压缩大小比lz4小,所以下载的速度lzma也比lz4的速度要快。
2.2 加载开销。运行时加载开销lz4要优于lzma不少。
2.3 加载时内存占用。在使用LoadFromFile(Async)加载lzma格式的AB包时,内存的占用会是资源文件内存的大约2倍,而使用lz4则是跟资源文件内存大小一致的。

总结是lz4无论是解压时间、加载开销和内存占用都优于lzma,但唯一的缺点就是包体会大不少(约25%)左右。所以如果想要包体小,且加载速度又快,我们可以使用GZip把资源在打包完之后再打个压缩包,这样的话包体也会小很多。

3. AssetBundle加载

AssetBundle加载有 WWW,AssetBundle.LoadFromFile等方式

3.1 WWW 其优点是即可网络加载又可加载本地,而其缺点是这种方式加载资源,所占的内存要比LoadFromFiles高,相比LoadFromFile加载速度也会要慢一些。

3.2 AssetBundle.LoadFromFiles是目前版本最推荐的加载本地AssetBundle的方式,从性能上目前是最好的,内存占用相比new www也要小。(本地加载www没有可比性)

推荐大家使用WWW来下载更新AB包,下载然后解压到本地后再通过LoadFromFile来加载,这样的做法又快又高效,资源还小。

4. AssetBundle卸载

AssetBundle卸载对应API:AssetBundle.Unload
参数为false时,bundle内的序列化数据将被释放,但是任何从这个bundle中实例化的物体都将完好,所以不能从这个bundle中加载更多物体
2.参数为true时,所有从该bundle中加载的物体也将被销毁,如果场景中有物体引用该资源,引用会丢失

5. AssetBundle依赖关系和打包策略

unity5以后通过API 可以自动处理依赖关系,打包前根据AssetBundles-Browser等工具组织资源引用即可

5.1 对于需要打AB的资源,通过加标签的方式添加到打包列表中。
5.2 合理规划AssetBundle包,公共的资源单独抽离打包。
5.3 注意资源与AssetBundle的关系,一个AssetBundle可以包含多个资源,但同一份资源不允许存在于多个AssetBundle中。
5.4 打包可以按场景或者功能模块分组,也可以按照资源类型和逻辑进行分组,也可根据项目实际情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值