增加procedure模块

This commit is contained in:
陈思海 2025-11-18 16:15:26 +08:00
parent 6b282e8d1d
commit 88c8022c4d
20 changed files with 65 additions and 82 deletions

View File

@ -79,7 +79,7 @@ MonoBehaviour:
m_BlockingObjects: 0 m_BlockingObjects: 0
m_BlockingMask: m_BlockingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 55 m_Bits: 4294967295
--- !u!114 &1744287959665422355 --- !u!114 &1744287959665422355
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -86,7 +86,7 @@ MonoBehaviour:
m_BlockingObjects: 0 m_BlockingObjects: 0
m_BlockingMask: m_BlockingMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 55 m_Bits: 4294967295
--- !u!114 &1590262444720639052 --- !u!114 &1590262444720639052
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -27,6 +27,7 @@ public class UILoadUpdate : UITabWindow<ui_UILoadUpdateWindow>
private void OnHandleTestUIOpenEevent(TestUIOpenEvent obj) private void OnHandleTestUIOpenEevent(TestUIOpenEvent obj)
{ {
} }
private void CreateTest() private void CreateTest()

View File

@ -6,7 +6,7 @@ using YooAsset;
namespace Unity.Startup.Procedure namespace Unity.Startup.Procedure
{ {
internal sealed class ProcedureDownloadBundleState : StateBase<UpdateProcedureState> internal sealed class ProcedureDownloadBundleState : ProcedureBase
{ {
ResourceDownloaderOperation downloader; ResourceDownloaderOperation downloader;
@ -15,7 +15,7 @@ namespace Unity.Startup.Procedure
CreateDownloader(); CreateDownloader();
} }
protected override void OnExit() protected override void OnLeave()
{ {
downloader.CancelDownload(); downloader.CancelDownload();
downloader = null; downloader = null;
@ -27,7 +27,7 @@ namespace Unity.Startup.Procedure
if (downloader.TotalDownloadCount == 0) if (downloader.TotalDownloadCount == 0)
{ {
Log.Info("没有发现需要下载的资源"); Log.Info("没有发现需要下载的资源");
SwitchState(UpdateProcedureState.ProcedurePatchDoneState); SwitchProcedure<ProcedurePatchDoneState>();
} }
else else
{ {
@ -66,7 +66,7 @@ namespace Unity.Startup.Procedure
return; return;
} }
SwitchState(UpdateProcedureState.ProcedurePatchDoneState); SwitchProcedure<ProcedurePatchDoneState>();
} }
private void OnDownloadProgressCallback(DownloadUpdateData data) private void OnDownloadProgressCallback(DownloadUpdateData data)

View File

@ -10,14 +10,14 @@ namespace Unity.Startup.Procedure
/// <summary> /// <summary>
/// 启动游戏 /// 启动游戏
/// </summary> /// </summary>
public class ProcedureEntryState : StateBase<UpdateProcedureState> public class ProcedureEntryState : ProcedureBase
{ {
protected override void OnEnter() protected override void OnEnter()
{ {
LauncherUIHandler.Start(); LauncherUIHandler.Start();
if (GameApp.Resource.PlayMode == EPlayMode.OfflinePlayMode || GameApp.Resource.PlayMode == EPlayMode.EditorSimulateMode) if (GameApp.Resource.PlayMode == EPlayMode.OfflinePlayMode || GameApp.Resource.PlayMode == EPlayMode.EditorSimulateMode)
{ {
SwitchState(UpdateProcedureState.ProcedureInitPackageState); SwitchProcedure<ProcedureInitPackageState>();
return; return;
} }
@ -31,7 +31,7 @@ namespace Unity.Startup.Procedure
if (GameApp.Resource.PlayMode == EPlayMode.WebPlayMode) if (GameApp.Resource.PlayMode == EPlayMode.WebPlayMode)
{ {
HttpHelper.CDNUrl = "http://127.0.0.1:8080/CDN/WebGL"; HttpHelper.CDNUrl = "http://127.0.0.1:8080/CDN/WebGL";
SwitchState(UpdateProcedureState.ProcedureInitPackageState); SwitchProcedure<ProcedureInitPackageState>();
return; return;
} }
@ -43,7 +43,7 @@ namespace Unity.Startup.Procedure
try try
{ {
await HttpHelper.GetRemoteVersion(); await HttpHelper.GetRemoteVersion();
SwitchState(UpdateProcedureState.ProcedureGetAppVersionInfoState); SwitchProcedure<ProcedureGetAppVersionInfoState>();
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -9,7 +9,7 @@ namespace Unity.Startup.Procedure
/// <summary> /// <summary>
/// 获取版本信息 /// 获取版本信息
/// </summary> /// </summary>
public sealed class ProcedureGetAppVersionInfoState : StateBase<UpdateProcedureState> public sealed class ProcedureGetAppVersionInfoState : ProcedureBase
{ {
protected override void OnEnter() protected override void OnEnter()
{ {
@ -34,8 +34,7 @@ namespace Unity.Startup.Procedure
return; return;
} }
SwitchProcedure<ProcedureInitPackageState>();
SwitchState(UpdateProcedureState.ProcedureInitPackageState);
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -4,7 +4,7 @@ using YooAsset;
namespace Unity.Startup.Procedure namespace Unity.Startup.Procedure
{ {
internal sealed class ProcedureInitPackageState : StateBase<UpdateProcedureState> internal sealed class ProcedureInitPackageState : ProcedureBase
{ {
private int maxFailedCount = 0; private int maxFailedCount = 0;
@ -66,11 +66,10 @@ namespace Unity.Startup.Procedure
{ {
if (GameApp.Resource.PlayMode == EPlayMode.OfflinePlayMode) if (GameApp.Resource.PlayMode == EPlayMode.OfflinePlayMode)
{ {
SwitchState(UpdateProcedureState.ProcedurePatchDoneState); SwitchProcedure<ProcedurePatchDoneState>();
return; return;
} }
SwitchProcedure<ProcedureDownloadBundleState>();
SwitchState(UpdateProcedureState.ProcedureDownloadBundleState);
} }
else else
{ {

View File

@ -12,7 +12,7 @@ using HybridCLR;
namespace Unity.Startup.Procedure namespace Unity.Startup.Procedure
{ {
public sealed class ProcedureLoadAssembly : StateBase<UpdateProcedureState> public sealed class ProcedureLoadAssembly : ProcedureBase
{ {
#if ENABLE_HYBRIDCLR #if ENABLE_HYBRIDCLR
private int m_LoadAssetCount; private int m_LoadAssetCount;
@ -33,7 +33,7 @@ namespace Unity.Startup.Procedure
protected override void OnEnter() protected override void OnEnter()
{ {
#if !ENABLE_HYBRIDCLR #if !ENABLE_HYBRIDCLR
SwitchState(UpdateProcedureState.ProcedureUpdateFinishState); SwitchProcedure<ProcedureUpdateFinishState>();
return; return;
#endif #endif
@ -78,7 +78,7 @@ namespace Unity.Startup.Procedure
#if ENABLE_HYBRIDCLR #if ENABLE_HYBRIDCLR
protected override void OnUpdate(float deltaTime) protected override void OnUpdate()
{ {
if (!m_LoadAssemblyComplete) if (!m_LoadAssemblyComplete)
{ {
@ -95,7 +95,7 @@ namespace Unity.Startup.Procedure
private void AllAssemblyLoadComplete() private void AllAssemblyLoadComplete()
{ {
SwitchState(UpdateProcedureState.ProcedureUpdateFinishState); SwitchProcedure<ProcedureUpdateFinishState>();
if (m_MainLogicAssembly == null) if (m_MainLogicAssembly == null)
{ {

View File

@ -6,7 +6,7 @@ using YooAsset;
namespace Unity.Startup.Procedure namespace Unity.Startup.Procedure
{ {
internal sealed class ProcedurePatchDoneState : StateBase<UpdateProcedureState> internal sealed class ProcedurePatchDoneState : ProcedureBase
{ {
protected override void OnEnter() protected override void OnEnter()
{ {
@ -18,7 +18,7 @@ namespace Unity.Startup.Procedure
private void ClearCacheCompleted(AsyncOperationBase obj) private void ClearCacheCompleted(AsyncOperationBase obj)
{ {
Log.Info($"清理包裹缓存完成"); Log.Info($"清理包裹缓存完成");
SwitchState(UpdateProcedureState.ProcedureLoadAssembly); SwitchProcedure<ProcedureLoadAssembly>();
} }
} }
} }

View File

@ -1,19 +1,19 @@
using Cysharp.Threading.Tasks;
using AlicizaX.Fsm.Runtime;
using UnityEngine; using AlicizaX;
using YooAsset;
namespace Unity.Startup.Procedure namespace Unity.Startup.Procedure
{ {
/// <summary> /// <summary>
/// 启动热更新游戏 /// 启动热更新游戏
/// </summary> /// </summary>
public sealed class ProcedureUpdateFinishState : StateBase<UpdateProcedureState> public sealed class ProcedureUpdateFinishState : ProcedureBase
{ {
protected override void OnEnter() protected override void OnEnter()
{ {
base.OnEnter(); base.OnEnter();
LauncherUIHandler.Dispose(); LauncherUIHandler.Dispose();
GameApp.Procedure.ClearAllProcedures();
} }
} }
} }

View File

@ -1,48 +0,0 @@
using System;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Unity.Startup.Procedure
{
public enum UpdateProcedureState : byte
{
ProcedureEntryState,
ProcedureGetAppVersionInfoState,
ProcedureInitPackageState,
ProcedureDownloadBundleState,
ProcedurePatchDoneState,
ProcedureLoadAssembly,
ProcedureUpdateFinishState
}
public class Procedure : MonoBehaviour
{
private SimpleFSM<UpdateProcedureState> _fsm;
private async UniTaskVoid Start()
{
await UniTask.WaitUntil(() => YooAsset.YooAssets.Initialized);
_fsm = new SimpleFSM<UpdateProcedureState>();
_fsm.Register<ProcedureEntryState>(UpdateProcedureState.ProcedureEntryState);
_fsm.Register<ProcedureGetAppVersionInfoState>(UpdateProcedureState.ProcedureGetAppVersionInfoState);
_fsm.Register<ProcedureInitPackageState>(UpdateProcedureState.ProcedureInitPackageState);
_fsm.Register<ProcedureDownloadBundleState>(UpdateProcedureState.ProcedureDownloadBundleState);
_fsm.Register<ProcedurePatchDoneState>(UpdateProcedureState.ProcedurePatchDoneState);
_fsm.Register<ProcedureLoadAssembly>(UpdateProcedureState.ProcedureLoadAssembly);
_fsm.Register<ProcedureUpdateFinishState>(UpdateProcedureState.ProcedureUpdateFinishState);
_fsm.SwitchState(UpdateProcedureState.ProcedureEntryState);
}
private void Update()
{
_fsm.Update(Time.deltaTime);
}
private void OnDestroy()
{
_fsm.Dispose();
_fsm = null;
}
}
}

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using AlicizaX;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Unity.Startup.Procedure
{
public class ProcedureEntry : MonoBehaviour
{
private async UniTaskVoid Start()
{
await UniTask.WaitUntil(() => YooAsset.YooAssets.Initialized);
GameApp.Procedure.InitializeProcedure(
new List<IProcedure>
{
new ProcedureEntryState(),
new ProcedureGetAppVersionInfoState(),
new ProcedureInitPackageState(),
new ProcedureDownloadBundleState(),
new ProcedurePatchDoneState(),
new ProcedureLoadAssembly(),
new ProcedureUpdateFinishState(),
},
typeof(ProcedureEntryState)
);
Destroy(gameObject);
}
}
}

View File

@ -10,7 +10,7 @@
"BuildPipeline": "EditorSimulateBuildPipeline", "BuildPipeline": "EditorSimulateBuildPipeline",
"PackageName": "DefaultPackage", "PackageName": "DefaultPackage",
"PackageVersion": "Simulate", "PackageVersion": "Simulate",
"PackageNote": "2025/11/17 16:58:36", "PackageNote": "2025/11/18 16:08:53",
"AssetList": [ "AssetList": [
{ {
"Address": "A1", "Address": "A1",
@ -1603,7 +1603,7 @@
"UnityCRC": 0, "UnityCRC": 0,
"FileHash": "8382993c3598a4a2e8d429b0d7a6f9f1", "FileHash": "8382993c3598a4a2e8d429b0d7a6f9f1",
"FileCRC": 0, "FileCRC": 0,
"FileSize": 9696, "FileSize": 9704,
"Encrypted": false, "Encrypted": false,
"Tags": [ "Tags": [
"UI" "UI"
@ -1615,7 +1615,7 @@
"UnityCRC": 0, "UnityCRC": 0,
"FileHash": "e0807c700d7f154aa3711c1bf07383d6", "FileHash": "e0807c700d7f154aa3711c1bf07383d6",
"FileCRC": 0, "FileCRC": 0,
"FileSize": 34603, "FileSize": 34611,
"Encrypted": false, "Encrypted": false,
"Tags": [ "Tags": [
"UI" "UI"

@ -1 +1 @@
Subproject commit 820f568dcf70c76f5f1058a4bcd9cace314fcd69 Subproject commit 5051b25b725d4c095f250847b63c138f09b41063

@ -1 +1 @@
Subproject commit e31dda94ce699d93a5a8fada24152fcd1d0816ab Subproject commit 958364080f889abb03729db844a2b0d0d1052e5e