TH1/Unity/Assets/Scripts/TH1_AOT/ResourceManager.cs
2026-06-11 00:34:50 +08:00

80 lines
2.4 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
namespace TH1Resource
{
public static class ResourceManager
{
public const string DefaultPackageName = "DefaultPackage";
private static ResourcePackage _package;
private static bool _initialized;
private static bool _initializing;
public static bool IsInitialized => _initialized;
public static ResourcePackage Package => _package;
public static SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode)
{
if (!_initialized)
{
Debug.LogError($"[TH1.YooAsset] Resource package is not initialized. scene={location}");
return null;
}
return _package.LoadSceneAsync(location, sceneMode);
}
public static IEnumerator InitializeCoroutine()
{
if (_initialized) yield break;
if (_initializing)
{
while (_initializing) yield return null;
yield break;
}
_initializing = true;
if (!YooAssets.Initialized)
{
YooAssets.Initialize();
}
_package = YooAssets.TryGetPackage(DefaultPackageName) ?? YooAssets.CreatePackage(DefaultPackageName);
YooAssets.SetDefaultPackage(_package);
var operation = _package.InitializeAsync(CreateInitializeParameters());
yield return operation;
_initializing = false;
if (operation.Status != EOperationStatus.Succeed)
{
Debug.LogError($"[TH1.YooAsset] Initialize {DefaultPackageName} failed: {operation.Error}");
yield break;
}
_initialized = true;
Debug.Log($"[TH1.YooAsset] Initialize {DefaultPackageName}: OK");
}
private static InitializeParameters CreateInitializeParameters()
{
#if UNITY_EDITOR
var parameters = new EditorSimulateModeParameters
{
SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(
EDefaultBuildPipeline.BuiltinBuildPipeline,
DefaultPackageName)
};
return parameters;
#else
return new OfflinePlayModeParameters();
#endif
}
}
}