Unity Addressable Assets ——可寻址资源系统

前段时间Unity官方发布消息称,可寻址资源系统已经脱离预览阶段,并将在Unity2019.3作为已验证资源包发布,同时在Unity 2018.4 LTS版本中得到支持。花了点事件研究了一下这个系统。官方文档入门介绍还是不错的。本文翻译自官方文档并加入一点自己的理解。原文链接

标记资源为可寻址的

  这里有两种方式将资源标记成可寻址的,在安装好可寻址资源包后,你可以在属性面板进行标记或者将其拖拽到可寻址窗口上。
  在资源的属性窗口上,点击Address复选框并为资源设置唯一标识符。
Unity Addressable Assets ——可寻址资源系统_第1张图片
  要打开可寻址窗口,点击 Window > Asset Management > Addressable Assets。将项目窗口的资源拖拽到可寻址窗口的一个群组下。(不能拖拽一整个文件夹,否则你会看到可寻址窗口下你拖拽的文件夹下的资源都是灰色的,代码也无法加载)
Unity Addressable Assets ——可寻址资源系统_第2张图片
  你的资源的默认地址是它在项目中的路径,比如Assets/images/myImage.png.。你可以使用可寻址窗口将资源的地址改为任何独特的名字。
  要改变资源的地址,双击当前资源的地址并输入一个新的地址(但在我的实际操作中,在可寻址窗口上双击是无效的,按F2可以,当然也可以直接在资源的属性面板中更改)。
  当你第一次使用可寻址资源时,系统会为你的项目在Assets/AddressableAssetsData保存一些编辑时和运行时的数据资源。这些数据应当被添加到版本控制检查当中。

建立你的游戏

  在打包项目之前,可寻址系统需要你的资源打包成运行时的游戏可以使用的文件(依然是ab包)。这个步骤不会自动完成,开发者需要通过UI或者API自行完成。
   1. 打开可寻址窗口,选择 Build->Build Player Content
   2. AddressableAssetSettings.BuildPlayerContent()

通过地址加载或实例化资源

  你可以在运行时加载或实例化资源。加载资源的同时会将所有的依赖加载进内存中,不再需要自己进行依赖包的管理。下面是加载和实例化对应的API,“AssetAddress”是资源的地址。

加载 Addressables.LoadAssetAsync(“AssetAddress”);
实例化 Addressables.InstantiateAsync(“AssetAddress”);

  这两个函数都是异步操作,你可以提供一个回调函数在资源加载完成后调用。

   GameObject myGameObject;


        ...
        Addressables.LoadAssetAsync<GameObject>("AssetAddress").Completed += OnLoadDone;
    }

    private void OnLoadDone(UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle<GameObject> obj)
    {
        // In a production environment, you should add exception handling to catch scenarios such as a null result;
        myGameObject = obj.Result;
    }

子资源和组件

使用AssetReference类

  AssetReference类提供了一种不要知道资源地址的访问机制。

  1. 选择一个资产
  2. 在属性面板中,点击 Add Component 按钮之后选中一个组件类型
  3. 为选择的组件添加一个公共字段
  4. 在属性面板上就可以看到这个字段了,选择要链接的资产就好了。

Unity Addressable Assets ——可寻址资源系统_第3张图片Unity Addressable Assets ——可寻址资源系统_第4张图片

通过AssetReference类加载可寻址资源

  当在自己的组件中定义了一个名为AssetRefMember的AssetReference类的字段后,可以通过下面的API加载或者实例化资源。

加载 AssetRefMember.LoadAssetAsync();
实例化 AssetRefMember.InstantiateAsync(pos, rot);

这两个函数同样也是异步的,我们可以为它们添加回调函数。

你可能感兴趣的:(Unity)