using Cysharp.Threading.Tasks; using System.Collections.Generic; using UnityEngine; using YooAsset; using Tuan.GameFramework; namespace Tuan.GameScripts.Main { public class AssetLoader :Singleton { Dictionary assetHandles = new Dictionary(); public async UniTask LoadAsync(string name, LoadingWindow loadingWindow = null) where T : UnityEngine.Object { AssetHandle handle = null; if (!assetHandles.ContainsKey(name)) { handle = YooAssets.LoadAssetAsync(name); await handle.ToUniTask(loadingWindow); assetHandles.Add(name, handle); Debug.Log($"AssetLoad:{name}"); } else { handle = assetHandles[name]; Debug.Log($"AssetLoad:{name}(已缓存handle)"); } if (loadingWindow != null) UIManager.Inst.CloseUI(loadingWindow); return handle.AssetObject as T; } public T Load(string name) where T : UnityEngine.Object { AssetHandle handle = null; if (!assetHandles.ContainsKey(name)) { handle = YooAssets.LoadAssetSync(name); assetHandles.Add(name, handle); Debug.Log($"AssetLoad:{name}"); } else { handle = assetHandles[name]; Debug.Log($"AssetLoad:{name}(已缓存handle)"); } return handle.AssetObject as T; } public AssetHandle GetHandle(string name) { if (assetHandles.ContainsKey(name)) return assetHandles[name]; return null; } } }