Framework_YooAsset_HybridCLR/Assets/DemoGame/GameScript/Loader/Res/ResourcesComponent.cs

71 lines
2.5 KiB
C#

using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
namespace Unity.Loader
{
public interface IResourcesComponent
{
//
UniTask<T> LoadAssetAsync<T>(string location, uint priority = 0) where T : UnityEngine.Object;
UniTask<Object> 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<T> LoadAssetAsync<T>(string location, uint priority = 0) where T : UnityEngine.Object
{
var loadAssetAsync = YooAssets.LoadAssetAsync<T>(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<Object> 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} 场景加载完成");
}
}
}