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 param) { return UniTask.CompletedTask; } public override async UniTask OnEnterAsync(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(domainConfig.mainPrefab); await loadOperation; if (loadOperation.Status == EOperationStatus.Succeed) { mainPrefab = loadOperation.InstantiateSync(); LocalTransformInfo info = mainPrefab.GetComponentInChildren(); 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.OnExit(); await domainBase.OnExitAsync(); GameObject.Destroy(domainBase.gameObject); } } }