通过label和address name加载
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.AddressableAssets;
public class CreateAsset : MonoBehaviour
{
[SerializeField] private string _label=null;
[SerializeField] private string _assetName=null;//Address name
private List<GameObject> Assets { get; } = new List<GameObject>();
private void Start()
{
StartCoroutine(waitUntil());
}
IEnumerator waitUntil()
{
yield return CreateAndWaitUntilCompleted();
}
private async Task CreateAndWaitUntilCompleted()
{
await CreateAddressableLoader.InitAsset(_label, Assets);
await CreateAddressableLoader.InitAsset(_assetName, Assets);
for (int i = 0; i < Assets.Count; i++)
{
Debug.Log(Assets[i].name);
}
await Task.Delay(TimeSpan.FromSeconds(5));
CleanUpFinishedAssets(Assets[0]);
}
private async Task CleanUpFinishedAssets(UnityEngine.Object obj)
{
Addressables.Release(obj);
}
}
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.AddressableAssets;
public static class CreateAddressableLoader
{
public static async Task InitAsset<T>(string nameOrLabel,List<T> createdObjs)where T:Object
{
var loactions = await Addressables.LoadResourceLocationsAsync(nameOrLabel).Task;
for (int i = 0; i < loactions.Count; i++)
{
createdObjs.Add(await Addressables.InstantiateAsync(loactions[i]).Task as T);
}
}
}