Unity Addressables总介绍

概论

当不再需要Addressable的实例时,应通过Addressables.ReleaseInstance 释放它,或在包含它的场景关闭时允许其自动清理,而不是通过Destroy 或DestroyImmediate 破坏其GameObject 。如果不再需要资产本身,则将其卸载。
每次通过可寻址对象加载或实例化可寻址资产时,其引用(ref)计数以及包含它的捆绑软件的ref计数都会增加。为了保持平衡,所有负载或实例都应具有成对的释放。

因为任何内容(甚至是目录)都可以远程存储,并且许多因素(例如内容大小,连接速度和/或存储介质)可以影响加载内容所需的时间,所以Addressables系统必然是异步的。开发人员可以通过三种方法来了解对Addressables的调用何时完成:回调(特别是Completed ,它返回与调用的性质有关的AsyncOperationHandle ,和CompletedTypeless ,它返回无类型的AsyncOperationHandle ),协程或AsyncAwait 。

加载或下载可寻址资产和/或其依存关系时,将对其进行缓存。标有“静态”的AssetBundle仅下载一次。加载可寻址资产会将其放置在内存中,但不会自动实例化它。指定地址或标签的所有依赖项也可以在必要时预加载。

传统上,每个资产的捆绑分配都存储在其元数据中,而与可寻址对象相关的数据则存储在AddressableAssetsData 文件夹中。您可以在“可寻址”窗口中创建此文件夹,或者在您首次使资产可寻址时将自动创建该文件夹-通过选中检查器中的复选框,或将其拖到“资产”组中。

开始
  • 下载
    Unity Addressables总介绍_第1张图片
    Unity Addressables总介绍_第2张图片
    Unity Addressables总介绍_第3张图片
    Unity Addressables总介绍_第4张图片

配置

Unity Addressables总介绍_第5张图片
就会看到配置的inspector:
Unity Addressables总介绍_第6张图片
添加新的配置:
在这里插入图片描述

代码生成实例对象

使用AssetReference生成对象

using UnityEngine;
using System.Collections;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Adressables : MonoBehaviour
{
    public AssetReference objectToLoad;
    public AssetReference accessoryObjectToLoad;
    private GameObject instantiatedObject;
    private GameObject instantiatedAccessoryObject;
    // Use this for initialization
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>(objectToLoad).Completed += ObjectLoadDone;
    }
    // Update is called once per frame
    void Update()
    {
    }
    private void ObjectLoadDone(AsyncOperationHandle<GameObject> obj)
    {
        if (obj.Status == AsyncOperationStatus.Succeeded)
        {
            GameObject loadedObject = obj.Result;
            Debug.Log("Successfully loaded object.");
            instantiatedObject = Instantiate(loadedObject);
            Debug.Log("Successfully instantiated object.");
            if (accessoryObjectToLoad != null)
            {
                accessoryObjectToLoad.InstantiateAsync(instantiatedObject.transform).Completed += op =>
                {
                    if (op.Status == AsyncOperationStatus.Succeeded)
                    {
                        instantiatedAccessoryObject = op.Result;
                        Debug.Log("Successfully loaded and instantiated accessory object.");
                    }
                };
            }
        }
    }
}

对要加载的物体勾选可寻址选项:

Unity Addressables总介绍_第7张图片
我这里讲自带的两个预制体物体打上了√
在这里插入图片描述

新建场景做加载测试

在摄像机上面挂载刚刚写的c#脚本
Unity Addressables总介绍_第8张图片

选择好需要加载的物品:

Unity Addressables总介绍_第9张图片

运行游戏:

Unity Addressables总介绍_第10张图片

你可能感兴趣的:(游戏开发,#,Unity3d,#,C#)