Addressable(一):基本使用

AsseteBundle缺点

  • 不可寻址,Asset文件和Bundle必须依赖一定的文件关系才能找到
  • 没有编辑器工具,显示那些Asset在那些Bundle里面,不能编辑器打包,不能分析Bundle的冗余
  • 从服务器下载更新Bundle需要写复杂的流程,且打包时需要记录Bundle额外的版本号,大小,MD5
  • 编辑器下加载和真机加载切换麻烦
  • 内存管理复杂,AB没有及时卸载导致内存占用过高,卸载不当额容易造成资源丢失。使用AssetBundle变得具有挑战性。

Addressable介绍

Addressable Asset System允许开发者通过Asset的地址来请求Asset。Asset标记为“可寻址”后,就会生成一个可以从任何地方调用的地址。无论Asset位于何处,本地还是远程,系统都会找到Asset及其依赖项,然后将其返回。
Addressables使用异步加载,Addressable解耦了资源包,并会管理所有复杂性。

Addressable优点

Addressable缩短了您的迭代周期。

  • 迭代时间:通过地址引用内容非常有效。对内容的优化不再需要更改代码。
  • 依赖管理:加载Asset前会加载所有依赖,例如加载Prefab前会加载所有网格、着色器、动画等。
  • 内存管理:系统卸载和加载资产,自动计数引用并提供强大的分析器来帮助您发现潜在的内存问题。
  • 内容打包:因为系统映射和理解复杂的依赖链,它允许有效打包捆绑包,即使在移动或重命名资产时也是如此。您可以轻松地为本地和远程部署准备资产,以支持可下载的内容并减少应用程序的大小。
  • 配置文件:系统允许您创建一组字符串变量,使您能够更轻松地更改内容构建到包中的方式,而无需修改多个位置的设置。

Addressable使用

  1. 指定要打包的Asset,把Addressable的勾选项勾选上。
    在这里插入图片描述

  2. 分组。点击上图的Slect选项,可以打开Addressable Groups窗口。点击Create,可以创建一个新的分组,拖动Asset可以移动到不同的分组,右键Asset可以重命名。在接下载的加载过程中,就是根据这个名称加载出对应的Asset。
    在这里插入图片描述
    鼠标选中上图的Default Local Group,在右边在Inspector可以看到bundle打出来将在什么位置。
    在这里插入图片描述

  3. 资源打包
    在这里插入图片描述

  4. 编辑器加载和真机加载
    在这里插入图片描述
    play Mode Script有三个选项,第一个是快速加载(faster),可以在Unity编辑器中测试,第二个是模拟加载(advanced),Unity模拟了一个远程加载的过程,第三个Build加载(requires),使用打出来的AB加载。

加载

文件名就是在分组下面的那个,加载都是异步的。

void Start()
    {
         var hand = Addressables.LoadAssetAsync<GameObject>("Assets/_GameAssets/Res/Prefabs/3D/Cube.prefab");
         hand.Completed += OnResLoadedHandler;
    }
    private void OnResLoadedHandler(AsyncOperationHandle<GameObject> obj)
    {
        GameObject go = obj.Result;
        Instantiate(go);
    }

猜你喜欢

转载自blog.csdn.net/KindSuper_liu/article/details/123029130