Files
plugin-library/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs

95 lines
3.6 KiB
C#
Raw Normal View History

2025-05-23 18:26:47 +08:00
using System;
using Cysharp.Threading.Tasks;
2026-01-07 18:20:13 +08:00
using Stary.Evo;
using Stary.Evo.InformationSave;
2025-05-23 18:26:47 +08:00
using UnityEngine;
2026-01-07 18:20:13 +08:00
using UnityEngine.SceneManagement;
2025-05-23 18:26:47 +08:00
using YooAsset;
namespace Stary.Evo
{
2025-09-02 14:15:18 +08:00
public class ResStartState : AbstractFSMIStateAsync
2025-05-23 18:26:47 +08:00
{
2026-01-07 18:20:13 +08:00
private DomainConfig domainConfig;
2025-05-23 18:26:47 +08:00
2026-01-07 18:20:13 +08:00
public ResStartState(IFsmSystemAsync system) : base(system)
2025-05-23 18:26:47 +08:00
{
}
2026-01-07 18:20:13 +08:00
public override async UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
2025-05-23 18:26:47 +08:00
{
2026-01-08 12:25:29 +08:00
if (AppConfig.DeveloperMode)
2026-01-07 18:20:13 +08:00
{
2026-01-08 12:25:29 +08:00
domainConfig = param1 as DomainConfig;
2026-04-18 12:00:41 +08:00
#if UNITY_WEBGL
2026-04-18 15:37:52 +08:00
string typeName = $"{domainConfig.@namespace}.{domainConfig.className},{domainConfig.assemblyName}";
Debug.Log($"尝试获取类型: {typeName}");
Type type = Type.GetType(typeName);
if (type != null)
{
Debug.Log($"成功获取类型: {type.FullName}");
}
else
{
Debug.LogError($"无法找到类型: {typeName}");
// 尝试使用备选方案
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var foundType = assembly.GetType($"{domainConfig.@namespace}.{domainConfig.className}");
if (foundType != null)
{
Debug.Log($"在程序集 {assembly.FullName} 中找到类型: {foundType.FullName}");
type = foundType;
break;
}
}
}
2026-04-18 12:00:41 +08:00
#else
2026-01-08 12:25:29 +08:00
Type type = param2 as Type;
2026-04-18 12:00:41 +08:00
#endif
2026-04-12 16:48:41 +08:00
GameObject mainPrefab = null;
2026-04-13 17:59:04 +08:00
//加载前卸载资源
await DomainAssetSystem.RemoveDomain(domainConfig);
2026-04-12 16:48:41 +08:00
switch (domainConfig.loadResType)
2026-01-08 12:25:29 +08:00
{
case DomainConfig.LoadResType.Prefab:
2026-04-12 16:48:41 +08:00
mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig);
await DomainAssetSystem.SetTransformInfo(mainPrefab);
if (domainConfig.domainLoadType != DomainConfig.DomainLoadType.Static)
{
DomainAssetSystem.AddDomainNameEntity(domainConfig);
}
else
{
DomainAssetSystem.AddDomainStaticNameEntity(domainConfig);
}
2026-01-08 12:25:29 +08:00
break;
case DomainConfig.LoadResType.Scene:
2026-04-12 16:48:41 +08:00
var package = YooAssets.GetPackage(domainConfig.domain);
2026-01-08 12:25:29 +08:00
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle =
package.LoadSceneAsync(domainConfig.sceneIdentifier, sceneMode, physicsMode);
await handle;
Scene targetScene = SceneManager.GetSceneByName(handle.SceneName);
SceneManager.SetActiveScene(targetScene);
2026-04-12 16:48:41 +08:00
mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig);
SceneManager.MoveGameObjectToScene(mainPrefab, targetScene);
2026-04-13 17:59:04 +08:00
DomainAssetSystem.AddDomainNameEntity(domainConfig);
2026-01-08 12:25:29 +08:00
break;
}
2026-01-05 17:58:53 +08:00
2025-05-23 18:26:47 +08:00
2026-04-12 16:48:41 +08:00
await DomainAssetSystem.BindableProperty(domainConfig, mainPrefab, type);
2026-01-07 18:20:13 +08:00
}
2025-05-23 18:26:47 +08:00
}
2025-05-30 14:50:46 +08:00
2026-04-13 17:59:04 +08:00
2025-05-23 18:26:47 +08:00
}
}