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
|
|
|
|
|
|
string typeName = $"{domainConfig.@namespace}.{domainConfig.className},{domainConfig.assemblyName}"; // 完整命名空间
|
|
|
|
|
|
Type type = Type.GetType(typeName);
|
|
|
|
|
|
#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
|
|
|
|
}
|
|
|
|
|
|
}
|