Unity AssetBundle打包

1,AssetBundle的概念与作用


AssetBundle是一个存档文件,是Unity提供的一种用于存储资源的资源压缩包,可以包含模型、贴图、音频、预制体等。
Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,继而有选择地加载内容。
而最重要的是AssetBundle可以用于热更新,是Unity更新非代码内容的主要工具。

2,AssetBundle组成


AssetBundle 主要由两部分组成:文件头和数据段

文件头包含了id、压缩类型、索引清单,该索引清单是与 Resources 相同的记录了序列化文件中的字节偏移量的查找表。对于大部分平台该表为平衡搜索树,对 Windows 和 OSX 系列(包括 iOS)则为红黑树,随着 AssetBundle 中对象的增加,构造清单所需时间的增长速度将超过线形增长速度
数据段包含了 Asset 经过序列化的原始数据,数据还可选择是否压缩,若使用 LZMA 压缩,则将所有 Asset 的字节数组整体压缩;若使用 LZ4 压缩,则将每个 Asset 单独压缩;若不压缩,则数据保持原始字节流

3,压缩模式

  • AssetBundle 提供了三种压缩格式
  • NoCompression:不压缩,解压快,包较大,不建议使用。
  • LZMA: 压缩最小,解压慢,用一个资源要解压包下所有资源。
  • LZ4: 压缩稍大,解压快,用什么解压什么,内存占用低,一般建议使用这种。


4,AssetBundle的构建


4.1 两种构建方式:

BuildPipeline.BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
BuildPipeline.BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);


第1种方式打包时要手动收集所有AssetBundleBuild
第2种方式事先生成或手动填写所有需要打包的AssetBundleBuild


推荐第2种方式,可以在Unity编辑器看到所有要打包的AB,比较直观。

4.2 分包策略

  • 将需要同时加载的对象分为一组,如一个模型,其所需的材质和动画分为一组
  • 若多个 AssetBundle 中的多个对象引用了其他 AssetBundle 中的单个 Asset,则将依赖项分离到单独的包中以减少重复
  • 确保两组完全不可能同时加载的对象不在用一包中,如低清和高清材质包
  • 若一个包中只有低于一半的对象被频繁加载,可将其拆分
  • 将一些同时加载的小包(资源少于5到10个)合并

单个ab包多大合适?


一般控制在10MB以下,最好不要超过20MB,相比总大小,控制单个ab的资源数量尤为重要。如果项目中大部分ab都只包含单个资源,太过分散需要加载的ab过多,导致io压力增加;如果单个ab包含太多资源,首先热更

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值