异步加载资源
public void LoadAssetAsync<T>(string name, Action<AsyncOperationHandle<T>> callBack)
{
string keyName = name + "_" + typeof(T).Name;
AsyncOperationHandle<T> handle;
if (resDic.ContainsKey(keyName))
{
handle = (AsyncOperationHandle<T>)resDic[keyName];
if (handle.IsDone)
callBack(handle);
else
{
handle.Completed += (obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
callBack(obj);
};
}
}
else
{
handle = Addressables.LoadAssetAsync<T>(name);
handle.Completed += (obj) =>
{
if (obj.Status == AsyncOperationStatus.Succeeded)
callBack(obj);
else
{
Debug.LogWarning(keyName + "资源加载失败");
if (resDic.ContainsKey(keyName))
resDic.Remove(keyName);
}
};
resDic.Add(keyName, handle);
}
}
资源释放
public void Release<T>(string name)
{
string keyName = name + typeof(T).Name;
if (resDic.ContainsKey(keyName))
{
AsyncOperationHandle<T> handle = (AsyncOperationHandle<T>)resDic[keyName];
Addressables.Release(handle);
resDic.Remove(keyName);
}
}
资源清空
public void Clear()
{
resDic.Clear();
AssetBundle.UnloadAllAssetBundles(true);
Resources.UnloadUnusedAssets();
GC.Collect();
}
其他
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableMgr
{
private static AddressableMgr instance = new AddressableMgr();
public static AddressableMgr Instance => instance;
private AddressableMgr() {
}
public Dictionary<string, IEnumerator> resDic = new Dictionary<string, IEnumerator>();
public void LoadAssetAsync<T>(string name, Action<AsyncOperationHandle<T>> callBack)
{
}
public void Release<T>(string name)
{
}
public void Clear()
{
}
}