Unity Addressables 的使用

1简单使用

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.SceneManagement;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class Spawner : MonoBehaviour
{
    public AssetReference prefabToLoad;
    public AssetReference prefabToLoad2;
    public GameObject instantiate1;
    public GameObject instantiate2;

    // Start is called before the first frame update
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>(prefabToLoad).Completed += LoadedObject;
    }

    private void LoadedObject(AsyncOperationHandle<GameObject> obj)
    {
        if(obj.Status == AsyncOperationStatus.Succeeded)  //如果将资源读到了内存
        {
            instantiate1 = Instantiate<GameObject>(obj.Result); //实例化资源

            //并且使用另一个方法,来直接读取实例化 
          
            prefabToLoad2.InstantiateAsync(instantiate1.transform).Completed += handle =>
            {
                if (handle.Status == AsyncOperationStatus.Succeeded)
                {
                    instantiate2 = handle.Result;
                    Debug.Log("附属物体加载成功");
                }
            };
           
            

        }
    }

}

 

2 很重要的一点

看Addressable的介绍时,他说只要把资源标记为addressable,不管你是移动、改名字,你原先对该资源的加载代码都不需要更改。

通过上面的AssetReference可以知道,你把资源标记为addressable,然后挂在AssetRefence属性上,确实可以移动、改名字,然后加载代码不需要更改,因为AssetRefence这个字段就直接指向了资源,我只需要以这个字段为参数进行加载就OK。

但是这不是我想要的。

我想要的是原先类似于Resources.Load("Sprites/Charater01")这样的 靠路径加载的方式。

但是如果靠路径进行加载的话,资源移动了,路径更改了,肯定就加载不了了。代码必须得改。

而Addressable里面,他除了给你的资源跟踪路径,还可以给你的资源设置Key。只要你的资源的这个Key不更改,那么无论改路径还是改名字,通过这个Key加载的代码都不需要更改。

 

举个例子

这是Addressable Group界面

在prefabs 组里面,有一个cube,后面的Assets/Cube.prefab就是它目前的地址。加载这个Cube可以使用两种方式加载。

一种是绝对路径加载Addressables.LoadAssetAsync<GameObject>("Assets/Cube.prefab")

还有一种就是通过key加载  Addressables.LoadAssetAsync<GameObject>("Cube")  

使用key加载,要你的资源的这个Key不更改,那么无论改路径还是改名字,通过这个Key加载的代码都不需要更改。

 

-----------------------------------------------------------------------

下面就这个key展开我的脑洞

1两个资源具有同一个key,但是在不同的组里

这样的话,如果我加载Cube,会只加载位于上面组的资源,路径为"Assets/Cube.prefab"的这个

 

2两个资源具有同一个key,但是在同一个组里

还是只会加载位于上面的资源,路径为"Assets/Cube.prefab"的这个。

 

总结就是,遇到同名的key的资源,只会选择一个加载。选择的逻辑就是 排在最上面的组的最上面的一个同名key资源。

 

 

3 通过key和label 共同加载

https://blog.csdn.net/zhenghongzhi6/article/details/103334939

讲的很清楚

 4 Release

Addressables里面有release的方法进行实例化回收和资源释放。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值