当前位置:   article > 正文

AssetBundle(一)——AssetBundle介绍_assetd bundle

assetd bundle

一:什么是AssetBundle?

Asset(资源) + bundle(捆绑) = AssetBundle(资源打包),一个AssetBundle就是一组资源的集合(可以压缩也可以不压缩),简称为AB包
——打包后:它是一个真实存在于硬盘上的文件,里面可能包含多个文件(模型、贴图、材质、预制体、声音、场景等),在游戏运行时被加载出来
这些文件可以分为两类:Serialized File(序列化文件)和Resource File(源文件)
Serialized File:资源(预制体,模型.....)被打碎放在同一个对象中,最后统一被写进一个单独的文件,最后只有一个文件
Resource File:某些资源(图片,声音.....)被单独保存为二进制文件,方便快速加载

——使用时:它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包里加载出来这个AssetBundle对象,这个对象包含了所有我们当初添加到包里面的内容


二:AssetBundle的优点

——存储位置可以放在可读可写的文件夹下,不必像例如Resource.Load只能将资源放在Resources文件夹中,进而在游戏运行时再被加载,减少安装包的大小
——AssetBundle可以实现资源的热更新,不需要下载整包
——更好地进行资源管理,将游戏资源(如纹理、模型、声音等)打包成单独的文件,这有助于更有效地管理和优化游戏资源

Resources文件夹下的资源打包时会被统一整合成一个序列化文件.asset,这个文件包含了元数据和索引信息,索引信息中包含了一颗查找树,它的效率是O(NLog(N)),N是这个资源在树中的索引, 虽然Resources文件夹下的资源本身不会在启动后加载到内存中,资源是Resources.Load后被加载进内存的,但是启动时会初始化所有Resource管理的资源(创建一个Resource索引表),Resource文件夹下文件越多,其索引表也就越大,会占用内存并且增加游戏的启动时间
如果是不需要经常更新,并且占用内存很小的资源是可以使用Resource管理的


三:AssetBundle的依赖关系

例如A包是一个材质包,B包是一个贴图包,A包中的材质引用B包中的贴图,如果不加载B包只加载A包,则A包中材质的贴图是丢失的


四:解读AB包中的文件

例如一个预制体A,赋值了材质和贴图B和C,将A设置为cube,B和C设置为share,打包后发现文件夹下出现以下文件,那么它们都有什么作用呢

——AssetBundles:打包成功后,会为当前目录生成一个与目录名同名的二进制文件和一个与目录名同名的manifest文件,与目录名同名的manifest文件(AssetBundles.manifest)记录了所有AB包和AB包的引用关系
——cube文件和share文件:二进制文件不可读,是我们打包的AB资源
——cube.manifest和share.manifest:cube文件和share文件对应的manifest文件,记录了这个AB包中资源路径和具体依赖了哪些包

目录对应的主manifest文件:(记录的都是AB包中的路径)

CRC:校验码
Info:记录每个AB包的AB包路径以及每个AB包自身依赖的AB包路径


单独AB包的manifest文件:

CRC:校验码
Assets:记录了当前包中每个资源的真实路径(Unity中的路径)
Dependencies:记录了当前包中资源的依赖关系(AB包中的路径)


五:AssetBundle分组策略

——逻辑实体分组
一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)
一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)
所有场景所共享的部分一个包(包括贴图和模型)


——按照类型分组
所有声音资源一个包,所有shader一个包,所有模型一个包,所有材质一个包


——按照使用分组
把在某一个时间内使用的所有资源打成一个包
可以按照关卡分,一个关卡所需要的所有资源包括角色,贴图,声音等打成一个包
也可以按照场景分,一个场景所需要的资源打成一个包


——把经常更新的资源放在同一个包中,不经常更新的资源与它分离
假如我们有A,B两个资源,每个资源都是100MB,A经常更新,B不经常更新
如果把A和B打成一个包,那么更新了A资源之后还是需要下载整个包,则为200MB
如果将经常更新的A资源与B资源分别打包,则当更新了A资源之后只需要下载更新的A资源包就可以,只需要下载100MB


——把需要同时加载的资源放在同一个包里
假如我们有A,B两个资源,它们是需要同时使用的,则把A资源和B资源打成一个包会更方便

——把其他包共享的资源放在一个单独的包里面。
假如我们有A,B,C三个资源。A和B是预制体,C是一个材质,A和B共享了C的材质。
如果不把材质单独打包的话,打包时会把A和B依赖的资源同时打进各自的包中,那么包中的资源会出现重复,增加包的大小。
如果把材质单独打包的话,A和B去引用C的材质,这样会避免资源重复打包,减小包的大


——把一些需要同时加载的小资源打包成一个包

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/82078
推荐阅读
相关标签
  

闽ICP备14008679号