// using System; // using System.Collections.Generic; // using System.Linq; // using System.Threading.Tasks; // using UnityEngine; // using UnityEngine.AddressableAssets; // using UnityEngine.ResourceManagement.AsyncOperations; // using UnityEngine.ResourceManagement.ResourceProviders; // using UnityEngine.SceneManagement; // using Stary.Evo; // // public class AddressableLoad : Singleton // { // private Dictionary nameCaches = new Dictionary(); // private AsyncOperationHandle ScenesHandle; //当前场景的Addressable Handle // // // /// // ///异步读取指定的Addressable类型的数据 // /// // /// // /// 执行成功的回调 // /// 执行失败的回调 // /// 路径 // public async Task LoadAssetASync(string addressName) where T : UnityEngine.Object // { // try // { // if (nameCaches.TryGetValue(addressName, out var existingHandle)) // { // await existingHandle.Task; // if (existingHandle.Status == AsyncOperationStatus.Succeeded) // { // var result = (T)existingHandle.Result; // return result; // } // else // { // nameCaches.Remove(addressName); // } // } // // var handle = Addressables.LoadAssetAsync(addressName); // nameCaches.Add(addressName, handle); // await handle.Task; // return handle.Result; // } // catch (Exception e) // { // Debug.LogError($"加载资源失败: 【{addressName}】\n{e.Message}"); // return null; // } // } // // /// // /// 同步读取指定的Addressable类型的数据 // /// // /// // /// 执行成功的回调 // /// 执行失败的回调 // /// 路径 // public void LoadAssetSync(string addressName, Action onComplete, Action onFailed) where T : UnityEngine.Object // { // if (nameCaches.ContainsKey(addressName)) // { // var handle = this.nameCaches[addressName]; // if (handle.IsDone) // { // if (onComplete != null) // { // onComplete(nameCaches[addressName].Result as T); // } // } // else // { // HandleAddCompleted(addressName, handle, onComplete, onFailed); // } // } // else // { // var handle = Addressables.LoadAssetAsync(addressName); // HandleAddCompleted(addressName, handle, onComplete, onFailed); // nameCaches.Add(addressName, handle); // } // } // // /// // /// 同步读取指定的Addressable类型的场景数据 // /// // public async Task LoadSceneAsync(string sceneName, LoadSceneMode mode, Action completeCallBack = null, // bool isActiveOnLoaded = true, int priority = 100) // { // var handle = Addressables.LoadSceneAsync(sceneName, mode, isActiveOnLoaded, priority); // // var res = await handle.Task; // // completeCallBack?.Invoke(); // // return res; // } // // /// // /// 读取指定的Addressable类型的名字或标签数据的集合 // /// // /// 名字 // /// 单个执行成功的回调 // /// 全部执行成功的回调 // /// 执行失败的回调 // /// // public void LoadTagAsset(string addressTag, Action onComplete, Action allOnComplete, // Action onFailed = null) where T : UnityEngine.Object // { // if (nameCaches.ContainsKey(addressTag)) // { // var handle = this.nameCaches[addressTag]; // if (handle.IsDone) // { // if (onComplete != null) // { // onComplete(nameCaches[addressTag].Result as T); // } // } // else // { // HandleAddCompleted(addressTag, handle, allOnComplete, onFailed); // } // } // else // { // var handle = Addressables.LoadAssetsAsync(addressTag, onComplete); // AddTagCompleted(addressTag, handle, allOnComplete, onFailed); // nameCaches.Add(addressTag, handle); // } // } // // private void AddTagCompleted(string addressTag, AsyncOperationHandle handle, Action allOnComplete, // Action onFailed = null) where T : UnityEngine.Object // { // handle.Completed += (result) => // { // if (result.Status == AsyncOperationStatus.Succeeded) // { // var obj = result.Result as T; // if (allOnComplete != null) // { // allOnComplete(obj); // } // } // else // { // if (onFailed != null) // { // onFailed(); // } // // Debug.LogErrorFormat("读取地址为-【{0}】-的ab包资源失败!", addressTag); // } // }; // } // // private void HandleAddCompleted(string addressName, AsyncOperationHandle handle, Action onComplete, // Action onFailed = null) where T : UnityEngine.Object // { // handle.Completed += (result) => // { // if (result.Status == AsyncOperationStatus.Succeeded) // { // var obj = result.Result as T; // if (onComplete != null) // { // onComplete(obj); // } // } // else // { // if (onFailed != null) // { // onFailed(); // } // // Debug.LogErrorFormat("读取地址为-【{0}】-的ab包资源失败!", addressName); // } // }; // } // // private void LoadRelease(string name) // { // if (nameCaches.ContainsKey(name)) // { // Addressables.Release(nameCaches[name]); // nameCaches.Remove(name); // } // } // // private void OnDestroy() // { // for (int i = 0; i < nameCaches.Count; i++) // { // KeyValuePair kv = nameCaches.ElementAt(i); // LoadRelease(kv.Key); // } // } // }