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的方法进行实例化回收和资源释放。