This commit is contained in:
2025-10-24 11:11:59 +08:00
parent c3f33afd70
commit cdd5eafa64
28 changed files with 1316 additions and 162 deletions

View File

@@ -16,7 +16,8 @@ namespace Stary.Evo
{
private DomainConfig.LoadResType loadResType;
public GameObject mainPrefab;
private DomainConfig domainConfig;
private DomainConfig domainConfig;
public LoadResState(IFsmSystemAsync system) : base(system)
{
}
@@ -39,42 +40,33 @@ namespace Stary.Evo
loadResType = domainConfig.loadResType;
Type type = param2 as Type;
var package = YooAssets.GetPackage(domainConfig.domain);
if (loadResType == DomainConfig.LoadResType.Prefab)
switch (loadResType)
{
// 加载热更资源
var loadOperation = package.LoadAssetAsync<GameObject>(domainConfig.mainPrefab);
case DomainConfig.LoadResType.Prefab:
await loadOperation;
if (loadOperation.Status == EOperationStatus.Succeed)
{
LoadDomainPrefab(package);
#if Immersal
ARSpace arSpace = GameObject.FindObjectOfType<ARSpace>();
if (arSpace != null)
break;
case DomainConfig.LoadResType.Scene:
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle = package.LoadSceneAsync(domainConfig.mainScene, sceneMode, physicsMode);
await handle;
Scene targetScene = SceneManager.GetSceneByName(domainConfig.mainScene);
targetScene.name = domainConfig.mainScene;
// 设置为 active scene 或者后续 Move 到该 scene
SceneManager.SetActiveScene(targetScene);
mainPrefab = GameObject.Find(domainConfig.mainPrefab);
if (mainPrefab == null)
{
Debug.Log("UnityEvo:找到ARSpace开始加载点云运行环境...");
mainPrefab = loadOperation.InstantiateSync(arSpace.transform);
} else
{
Debug.Log("UnityEvo:未找到ARSpace开始加载普通运行环境通过语音唤醒...");
mainPrefab = loadOperation.InstantiateSync();
LoadDomainPrefab(package);
}
#elif NotPointClond
mainPrefab = loadOperation.InstantiateSync();
#endif
if(domainConfig.domain =="Main")
AppConfig.SetDefaultMainInstance(mainPrefab);
}
}
else if (loadResType == DomainConfig.LoadResType.Scene)
{
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle = package.LoadSceneAsync(domainConfig.mainScene, sceneMode, physicsMode);
await handle;
mainPrefab = GameObject.Find(domainConfig.mainPrefab);
break;
}
LocalTransformInfo info = mainPrefab.GetOrAddComponent<LocalTransformInfo>();
FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem;
@@ -93,10 +85,11 @@ namespace Stary.Evo
info.transform.position = fsmLoadSystem.GetTransformCtor().position;
info.transform.rotation = Quaternion.Euler(fsmLoadSystem.GetTransformCtor().rotation);
info.transform.localScale = fsmLoadSystem.GetTransformCtor().scale;
}else{
info.Switch(0);
}
else
{
info.Switch(0);
}
}
else
{
@@ -130,6 +123,32 @@ namespace Stary.Evo
base.OnUpdate();
}
private async void LoadDomainPrefab(ResourcePackage package)
{
// 加载热更资源
var loadOperation = package.LoadAssetAsync<GameObject>(domainConfig.mainPrefab);
await loadOperation;
if (loadOperation.Status == EOperationStatus.Succeed)
{
#if Immersal
ARSpace arSpace = GameObject.FindObjectOfType<ARSpace>();
if (arSpace != null)
{
Debug.Log("UnityEvo:找到ARSpace开始加载点云运行环境...");
mainPrefab = loadOperation.InstantiateSync(arSpace.transform);
} else
{
Debug.Log("UnityEvo:未找到ARSpace开始加载普通运行环境通过语音唤醒...");
mainPrefab = loadOperation.InstantiateSync();
}
#elif NotPointClond
mainPrefab = loadOperation.InstantiateSync();
#endif
if (domainConfig.domain == "Main")
AppConfig.SetDefaultMainInstance(mainPrefab);
}
}
public override async UniTask OnExitAsync()
{
@@ -149,7 +168,7 @@ namespace Stary.Evo
if (loadResType == DomainConfig.LoadResType.Scene)
{
await SceneManager.UnloadSceneAsync("server");
await SceneManager.UnloadSceneAsync(domainConfig.mainScene);
}
if (domainBase != null)
@@ -158,7 +177,6 @@ namespace Stary.Evo
await ForceUnloadAllAssets(domainBase.DomainName);
}
}
}