using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; using YooAsset; namespace Unity.Loader { public interface IResourcesComponent { // UniTask LoadAssetAsync(string location, uint priority = 0) where T : UnityEngine.Object; UniTask LoadAssetAsync(string location, uint priority = 0); UniTask LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100); } public class ResourcesComponent : IResourcesComponent { private static ResourcesComponent instance; public static ResourcesComponent Instance { get { if (instance == null) { instance = new ResourcesComponent(); } return instance; } } public async UniTask LoadAssetAsync(string location, uint priority = 0) where T : UnityEngine.Object { var loadAssetAsync = YooAssets.LoadAssetAsync(location, priority); while (!loadAssetAsync.IsDone) { Debug.Log($"加载{location}中,进度:{loadAssetAsync.Progress}"); await UniTask.Yield(); } var assetObject = loadAssetAsync.AssetObject as T; Debug.Log($"{location} 加载完成 : {assetObject}"); return assetObject; } public async UniTask LoadAssetAsync(string location, uint priority = 0) { var loadAssetAsync = YooAssets.LoadAssetAsync(location, priority); while (!loadAssetAsync.IsDone) { Debug.Log($"加载{location}中,进度:{loadAssetAsync.Progress}"); await UniTask.Yield(); } Debug.Log($"{location} 加载完成 : {loadAssetAsync}"); return loadAssetAsync.AssetObject; } public async UniTask LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100) { var loadAssetAsync = YooAssets.LoadSceneAsync(location, sceneMode, suspendLoad, priority); while (!loadAssetAsync.IsDone) { Debug.Log($"加载{location}中,进度:{loadAssetAsync.Progress}"); await UniTask.Yield(); } Debug.Log($"{location} 场景加载完成"); } } }