92 lines
2.8 KiB
C#
92 lines
2.8 KiB
C#
|
|
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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|