Unity 热更--AssetBundle学习笔记 0.8
  1wMBnbixARwC 15天前 34 0

AB包的依赖

接上一小结。

在这里我们新建一个红色材质球,赋值给Cube预制体。此时不对材质球进行AB包分类,再次进行打包。运行脚本,发现红色cube成功的从AB包中加载出来。尽管我们没有将cube所依赖的材质球进行打包分类,但是打包时候unity会自动将包中的物体相关依赖打入包中【图三所示】。对于所依赖的资源我们如果不进行打包设置,也可以正常使用。

img

image-20240502143653075

image-20240502144138523

如果还是这个红色的材质球,需要被其它AB包中的预制体所使用呢?每个AB包里会默认打入一个材质球显然有些浪费AB包的空间。

我们可以设置某个公共资源打入到具体的包中,而在加载使用AB包中的资源时候,把此AB包相关依赖的其它AB包也同时加载出来即可满足使用。也就是说我要加载A资源时候,会检查A资源依赖的其它资源包(可能是B、C),将ABC同样加载到内存中,这样在使用A的时候,不会造成资源丢失问题。

img

private void Awake()
  {
      //获取AB包 打包的文件已经拷贝到streamingAssets文件下 从此位置加载
      //注意!AB包不能重复加载
      ab  = AssetBundle.LoadFromFile(Application.streamingAssetsPath +"/"+"model");
      _image = GameObject.Find("Canvas/Image").GetComponent<Image>();
      //加载主包资源  
      mainAB = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "StandaloneWindows");
      //获取主包中的存储的包和包之间的依赖关系
      AssetBundleManifest manifest = mainAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
      //获取model资源相关的依赖
      string[] dependencies = manifest.GetAllDependencies("model");
      foreach (var dependency in dependencies)
      {
          //加载依赖的ab包
          AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + dependency);
      }
  }

其加载的就是AB主包资源中的mainfest文件,读取其中存储的model包的AB包资源依赖,从而将依赖资源所在的AB包也加载到内存中。

img

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 15天前 0

暂无评论

推荐阅读
  oXKBKZoQY2lx   2024年03月23日   51   0   0 游戏开发
  V6wYmmY0loaH   2024年04月11日   26   0   0 游戏开发
1wMBnbixARwC