AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

时间:2024-03-16 07:02:13
  • siki学院学习链接:http://www.sikiedu.com/my/course/74
1.制定asset bundle标签时就是在分组,同一个标签就是一组,打包在一个asset bundle中

以下分组仅供参考:

AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

总结:

AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

2.依赖打包
AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

①.贴图与模型一起打包

                                     AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

②.贴图材质单独打包

首先将材质与贴图等一起打包成一个asset bundle

                                            AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

两个预制体分别打包,会自动判断其使用的贴图和材质哟普没有打包,如果打包就依赖于它

                                         AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

打包之后:

                                          AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

3.资源重复时解决方案

官方参考:https://docs.unity3d.com/Manual/AssetBundles-Troubleshooting.html

  • 依赖包重复时解决方案:

AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

  • 图集重复时解决方案:

       首先要了解什么是图集重复?

                               AssetBundle学习之路(三) ------ asset bundle分组策略/依赖打包/资源重复问题解决方案

      当一张图片没指定图集名字时会默认打包成一个图集,假设图片A和图片B都没有制定图集名字,如果图片A被打包在assetbundle A中,图片A所在的图集也会一起被打包assetbundle A中。而图片B被打包在assetbundle B中,图片B所在的图集也会一起被打包assetbundle B中,这样assetbundle A和assetbundle B会有同样的图集,这就是图集重复

    解决方案: 确保同一个图集的图片打包成一个asset bundle中

  • Android贴图问题
      由于Android生态系统中设备的严重碎片化,通常需要将纹理压缩成几种不同的格式。虽然所有的Android设备都支持ETC1,但是ETC1不支持带有alpha通道的纹理。如果一个应用程序不需要OpenGL ES 2支持,解决这个问题的最干净的方法是使用ETC2,它由所有Android OpenGL ES 3设备支持。
大多数应用程序需要在没有ETC2支持的旧设备上运行。解决这个问题的一种方法是使用Unity 5的AssetBundle变体。(请参阅Unity的Android优化指南,了解其他选项的详细信息。)
要使用AssetBundle变体,所有不能用ETC1清洁压缩的纹理必须被隔离到只有文本的AssetBundle中。接下来,创建这些assetbundle的足够变体来支持Android生态系统的非etc2功能的切片,使用特定于供应商的纹理压缩格式,如DXT5、PVRTC和ATITC。对于每一个AssetBundle变体,将所包含的纹理的纹理导入设置更改为适合于该变体的压缩格式。
在运行时,可以使用SystemInfo检测不同纹理压缩格式的支持。SupportsTextureFormat API。该信息应该用于选择和加载包含以受支持格式压缩的纹理的AssetBundle变体。
更多关于Android纹理压缩格式的信息可以在这里找到。
  • iOS File Handle Overuse
下一节中描述的问题是在Unity 5.3.2.p2中确定的。当前的统一版本不受这个问题的影响。
在Unity 5.3.2.p2之前的版本中,Unity会在加载AssetBundle的整个时间内,将一个打开的文件句柄保存到一个AssetBundle中。这在大多数平台上都不是问题。然而,iOS限制了一个进程可能同时打开到255的文件句柄的数量。如果加载一个AssetBundle导致这个限制被超过,那么加载调用将会因为“太多的打开文件句柄”错误而失败。
对于试图将其内容划分为数百或数千个assetbundle的项目来说,这是一个常见的问题。
对于无法升级到修补过的统一版本的项目,临时解决方案是:
通过合并相关的assetbundle来减少使用的assetbundle的数量
使用assetbundle.卸载(false)关闭AssetBundle的文件句柄,并手动管理加载的对象的生命周期