71 lines
2.5 KiB
C#
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} 场景加载完成");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|