Unity Addressables总介绍

10 篇文章 0 订阅
7 篇文章 0 订阅

概论

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

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

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

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

开始
  • 下载
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

配置

在这里插入图片描述
就会看到配置的inspector:
在这里插入图片描述
添加新的配置:
在这里插入图片描述

代码生成实例对象

使用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.");
                    }
                };
            }
        }
    }
}
对要加载的物体勾选可寻址选项:

在这里插入图片描述
我这里讲自带的两个预制体物体打上了√
在这里插入图片描述

新建场景做加载测试

在摄像机上面挂载刚刚写的c#脚本
在这里插入图片描述

选择好需要加载的物品:

在这里插入图片描述

运行游戏:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值