Files
plugin-library/Assets/Main/Script/Runtime/Fsm/LoadResState.cs

92 lines
2.8 KiB
C#
Raw Normal View History

2025-05-23 18:26:47 +08:00
using System;
using Cysharp.Threading.Tasks;
using Stary.Evo.InformationSave;
using UnityEngine;
using YooAsset;
namespace Stary.Evo
{
public class LoadResState : AbstractFSMIState
{
public GameObject mainPrefab;
public LoadResState(IFsmSystem system) : base(system)
{
}
public override UniTask OnEnterAsync()
{
return UniTask.CompletedTask;
}
public override UniTask OnEnterAsync<T>(T param)
{
return UniTask.CompletedTask;
}
public override async UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
{
Debug.Log("加载资源...");
DomainConfig domainConfig = param1 as DomainConfig;
Type type = param2 as Type;
var package = YooAssets.GetPackage(domainConfig.domain);
// 加载热更资源
var loadOperation = package.LoadAssetAsync<GameObject>(domainConfig.mainPrefab);
await loadOperation;
if (loadOperation.Status == EOperationStatus.Succeed)
{
mainPrefab = loadOperation.InstantiateSync();
LocalTransformInfo info = mainPrefab.GetComponentInChildren<LocalTransformInfo>();
FsmLoadSystem fsmLoadSystem = FsmSystem as FsmLoadSystem;
if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.DEFAULT)
{
info.Switch(0);
}
else if (fsmLoadSystem.GetOpenDomainType() == OpenDomainType.VIOICE)
{
info.Switch(1);
}
if (mainPrefab != null)
{
DomainBase hotfixInstance = mainPrefab.GetComponent(type) as DomainBase;
if (hotfixInstance == null)
{
hotfixInstance = mainPrefab.AddComponent(type) as DomainBase;
}
hotfixInstance.DomainName = domainConfig.domain;
if (hotfixInstance == null)
{
Debug.LogError($"热更类{type.Name}实例创建失败必须继承MonoBehaviour");
return;
}
// 原有调用逻辑修改为使用实例
hotfixInstance.OnEnter("");
hotfixInstance.OnEnterAsync("");
}
}
}
public override void OnUpdate()
{
base.OnUpdate();
}
public override async UniTask OnExitAsync()
{
Debug.Log("UnityEvo:Domain退出...");
DomainBase domainBase = mainPrefab.GetComponent<DomainBase>();
domainBase.OnExit();
await domainBase.OnExitAsync();
GameObject.Destroy(domainBase.gameObject);
}
}
}