Framework_YooAsset_HybridCLR/Assets/DemoGame/GameScript/Hotfix/Res/ResourcesLocalComponent.cs

122 lines
4.4 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
using Object = UnityEngine.Object;
namespace ZC
{
public interface IResourcesLocalComponent
{
UniTask<T> LoadAssetAsync<T>(string location, uint priority = 0) where T : UnityEngine.Object;
UniTask<Object> LoadAssetAsync(string location, uint priority = 0);
T LoadAssetSync<T>(string location) where T : UnityEngine.Object;
Object LoadAssetSync(string location);
UniTask LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100, Action<float> callback = null);
}
public class ResourcesLocalComponent : IResourcesLocalComponent
{
private static ResourcesLocalComponent instance;
public static ResourcesLocalComponent Instance
{
get
{
if (instance == null)
{
instance = new ResourcesLocalComponent();
}
return instance;
}
}
ResourcePackage resourcePackage;
Transform Min;
Transform Low;
Transform Mid;
Transform Hid;
Transform Parent;
public ResourcesLocalComponent()
{
resourcePackage = YooAssets.GetPackage("DefaultPackage");
var transform = ZCGame.Self.transform;
Min = transform.Find("Global/UI/UICanvas/Min");
Low = transform.Find("Global/UI/UICanvas/Low");
Mid = transform.Find("Global/UI/UICanvas/Mid");
Hid = transform.Find("Global/UI/UICanvas/Hid");
Parent = transform.Find("Global/GameObject");
}
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();
}
Debug.Log($"加载{location}完成");
var assetObject = loadAssetAsync.AssetObject as T;
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}完成");
return loadAssetAsync.AssetObject;
}
public T LoadAssetSync<T>(string location) where T : Object
{
var loadAssetAsync = YooAssets.LoadAssetSync<T>(location);
Debug.Log($"加载{location}完成");
var assetObject = loadAssetAsync.AssetObject as T;
return assetObject;
}
public Object LoadAssetSync(string location)
{
var loadAssetAsync = YooAssets.LoadAssetSync(location);
Debug.Log($"加载{location}完成");
return loadAssetAsync.AssetObject;
}
public async UniTask<GameObject> LoadAssetAndInsAsync(string location, Transform parent = null, uint priority = 0)
{
var loadAssetAsync = YooAssets.LoadAssetAsync(location, priority);
while (!loadAssetAsync.IsDone)
{
Debug.Log($"加载{location}中,进度:{loadAssetAsync.Progress}");
await UniTask.Yield();
}
var instantiateOperation = loadAssetAsync.InstantiateAsync(parent);
await instantiateOperation.Task;
return instantiateOperation.Result;
}
public async UniTask LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100U, Action<float> callback = null)
{
var loadAssetAsync = YooAssets.LoadSceneAsync(location, sceneMode, suspendLoad, priority);
while (!loadAssetAsync.IsDone)
{
Debug.Log($"加载{location}中,进度:{loadAssetAsync.Progress}");
callback?.Invoke(loadAssetAsync.Progress);
await UniTask.Yield();
}
}
}
}