更新Procedure流程

更新Procedure流程
This commit is contained in:
Alex-Rachel
2025-02-20 01:39:52 +08:00
parent 6166fd24c6
commit 5887133894
2 changed files with 38 additions and 7 deletions

View File

@@ -67,14 +67,13 @@ namespace GameMain
if (playMode == EPlayMode.EditorSimulateMode)
{
Log.Info("Editor resource mode detected.");
ChangeState<ProcedurePreload>(procedureOwner);
ChangeState<ProcedureInitResources>(procedureOwner);
}
// 单机模式。
else if (playMode == EPlayMode.OfflinePlayMode)
{
Log.Info("Package resource mode detected.");
// ChangeState<ProcedureInitResources>(procedureOwner);
ChangeState<ProcedureUpdateVersion>(procedureOwner);
ChangeState<ProcedureInitResources>(procedureOwner);
}
// 可更新模式。
else if (playMode == EPlayMode.HostPlayMode ||

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections;
using Cysharp.Threading.Tasks;
using TEngine;
using YooAsset;
using ProcedureOwner = TEngine.IFsm<TEngine.IProcedureManager>;
namespace GameMain
@@ -20,7 +22,7 @@ namespace GameMain
UILoadMgr.Show(UIDefine.UILoadUpdate,"初始化资源中...");
// 注意:使用单机模式并初始化资源前,需要先构建 AssetBundle 并复制到 StreamingAssets 中,否则会产生 HTTP 404 错误
OnInitResourcesComplete().Forget();
Utility.Unity.StartCoroutine(InitResources(procedureOwner));
}
protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
@@ -36,11 +38,41 @@ namespace GameMain
ChangeState<ProcedurePreload>(procedureOwner);
}
private async UniTaskVoid OnInitResourcesComplete()
/// <summary>
/// 编辑器与单机保持相同流程。
/// </summary>
/// <returns></returns>
private IEnumerator InitResources(ProcedureOwner procedureOwner)
{
await UniTask.Delay(TimeSpan.FromSeconds(1f));
// 2. 获取资源清单的版本信息
var operation1 = GameModule.Resource.UpdatePackageVersionAsync();
yield return operation1;
if (operation1.Status != EOperationStatus.Succeed)
{
OnInitResourcesError(procedureOwner);
yield break;
}
// 3. 传入的版本信息更新资源清单
var operation = GameModule.Resource.UpdatePackageManifestAsync(operation1.PackageVersion);
yield return operation;
if (operation.Status != EOperationStatus.Succeed)
{
OnInitResourcesError(procedureOwner);
yield break;
}
m_InitResourcesComplete = true;
Log.Info("Init resources complete.");
}
private void OnInitResourcesError(ProcedureOwner procedureOwner)
{
UILoadTip.ShowMessageBox($"初始化资源失败!点击确认重试</color>", MessageShowType.TwoButton,
LoadStyle.StyleEnum.Style_Retry
, () =>
{
Utility.Unity.StartCoroutine(InitResources(procedureOwner));
}, UnityEngine.Application.Quit);
}
}
}