最简单的和Prefab和一样通过面板实例化
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.Video;
public class AssetRefData : MonoBehaviour
{
//通过面板实例化
[SerializeField] private AssetReference aRef=null;
[SerializeField] private List<AssetReference> references=new List<AssetReference>();
[SerializeField] private List<GameObject> completedObjs = new List<GameObject>();
private void Start()
{
references.Add(aRef);
StartCoroutine(loadUnitlCompleted());
}
IEnumerator loadUnitlCompleted()
{
yield return AssetRefLoader.CreateAssetAddToList<GameObject>(references, completedObjs);
yield return new WaitForSeconds(2);
ReleaseObj(completedObjs[0]);
}
private void ReleaseObj(GameObject obj)
{
Addressables.ReleaseInstance(obj);
}
}
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.AddressableAssets;
public static class AssetRefLoader
{
public static async Task CreateAssetAddToList<T>
(AssetReference reference,List<T> completedObjs)where T:Object
{
completedObjs.Add(await reference.InstantiateAsync().Task as T );
}
public static async Task CreateAssetAddToList<T>
(List<AssetReference> reference, List<T> completedObjs) where T : Object
{
for (int i = 0; i < reference.Count; i++)
{
completedObjs.Add(await reference[i].InstantiateAsync().Task as T);
}
}
}