using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Game;
using YooAsset;
namespace Mono
{
//
public class ResourceComponent
{
private static ResourceComponent instance;
public static ResourceComponent Instance
{
get
{
if (instance == null)
{
instance = new ResourceComponent();
}
return instance;
}
}
private bool isLoadFinish;
private EPlayMode playMode;
ResourceUpdatePackageHandle handle;
ResourcePackage _defaultPackage;
public ResourceComponent()
{
isLoadFinish = false;
EventManager.Instance.Subscribe(UpdaterDoneEventArgs.EventId, UpdaterDoneEvent);
YooAssets.Initialize();
}
private void UpdaterDoneEvent(object sender, GameEventArgs e)
{
var args = e as UpdaterDoneEventArgs;
isLoadFinish = true;
}
public async UniTask InitLoadModeAsync(EPlayMode playMode, string packageName)
{
this.playMode = playMode;
handle = new ResourceUpdatePackageHandle(playMode, packageName, EDefaultBuildPipeline.BuiltinBuildPipeline.ToString());
await handle.InitPackageAsync();
while (!this.isLoadFinish)
{
await UniTask.Yield();
}
_defaultPackage = YooAssets.GetPackage("DefaultPackage");
YooAssets.SetDefaultPackage(_defaultPackage);
}
///
/// 主要用来加载dll config aotdll,因为这时候纤程还没创建,无法使用ResourcesLoaderComponent。
/// 游戏中的资源应该使用ResourcesLoaderComponent来加载
///
public async UniTask LoadAssetAsync(string location) where T : UnityEngine.Object
{
AssetHandle handle = YooAssets.LoadAssetAsync(location);
await handle.Task;
T t = (T)handle.AssetObject;
handle.Release();
return t;
}
///
/// 主要用来加载dll config aotdll,因为这时候纤程还没创建,无法使用ResourcesLoaderComponent。
/// 游戏中的资源应该使用ResourcesLoaderComponent来加载
///
public async UniTask> LoadAllAssetsAsync(string location) where T : UnityEngine.Object
{
AllAssetsHandle allAssetsOperationHandle = YooAssets.LoadAllAssetsAsync(location);
await allAssetsOperationHandle.Task;
Dictionary dictionary = new Dictionary();
foreach (UnityEngine.Object assetObj in allAssetsOperationHandle.AllAssetObjects)
{
T t = assetObj as T;
dictionary.Add(t.name, t);
}
allAssetsOperationHandle.Release();
return dictionary;
}
}
}