AssetBundle梳理
什么是AssetBundle
1、AssetBundle是一个资源压缩包,包含游戏中用到的各种各样的资源,例如:模型、图片、预制体、场景等;
2、AssetBundle是一种二进制文件,里面包含资源本身的数据、依赖资源的依赖关系;
3、主要使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
AssetBundle的使用
1、在Unity中指定资源的AssetBundle属性
设置ab的名字
2、构建ab包
3、上传ab包
4、加载ab包和包中的资源
代码打包AssetBundle
打包是会将同时加载的资源放在同一个包里,各个包之间会保存相互依赖的信息
1 | [ ] |
AssetBundle的加载和卸载
1 | private void Start() |
注意点:
1、ab的卸载有可能导致丢失
2、在切换场景,或者确定不使用的时候卸载
AssetBundle.Unload(true) //卸载AB文件的内存镜像,且包含所有Load创建出来的对象
AssetBundle.Unload(false) //卸载AB文件的内存镜像,但是除了Load创建出来的对象
Reources.UnloadAsset(Object) //释放已加载的资源Object
Resources.UnloadUnusedAssets //卸载所有没有被场景引用的资源对象
AssetBundle分组策略总结
逻辑实体分组
1、UI界面根据功能分组;
2、单个模型一个包,共享的贴图单独分包;
3、一个场景一个包,共享部分单独分包;
类型分组
所有声音资源一个包,所有shader一个包,所有模型一个包,所有材质一个包
使用分组
把在某一时间内使用的所有资源打成一个包。可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。也可以按照场景分,一个场景所需要的资源一个包
注意
1、经常更新的资源放在一个单独的包里面,跟不经常更新的包分离
2、把需要同时加载的资源放在一个包里面
3、可以把其他包共享的资源放在一个单独的包里面
4、把一些需要同时加载的小资源打包成一个包
5、如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分,例如v1、v2、v3
Manifest文件
crc为校验码,通过其检查是否完整
Assets 表示包里包含多少资源
Dependencies 表示包有哪些依赖
注意:在加载这些包之前,也需要加载依赖的包,不然会丢失这部分内容,显示效果不正确
文件校验
CRC、MD5、SHA1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据的完整性。
CRC一般用于通信数据的校验,MD5和SHA1用于安全领域,例如文件校验,密码加密等
AssetBundle浏览工具
GitHub 工具地址: AssetBundles-Browser