增加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_BlockingMask:
serializedVersion: 2
m_Bits: 55
m_Bits: 4294967295
--- !u!114 &1744287959665422355
MonoBehaviour:
m_ObjectHideFlags: 0

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,19 +1,19 @@
using Cysharp.Threading.Tasks;
using AlicizaX.Fsm.Runtime;
using UnityEngine;
using YooAsset;
using AlicizaX;
namespace Unity.Startup.Procedure
{
/// <summary>
/// 启动热更新游戏
/// </summary>
public sealed class ProcedureUpdateFinishState : StateBase<UpdateProcedureState>
public sealed class ProcedureUpdateFinishState : ProcedureBase
{
protected override void OnEnter()
{
base.OnEnter();
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",
"PackageName": "DefaultPackage",
"PackageVersion": "Simulate",
"PackageNote": "2025/11/17 16:58:36",
"PackageNote": "2025/11/18 16:08:53",
"AssetList": [
{
"Address": "A1",
@ -1603,7 +1603,7 @@
"UnityCRC": 0,
"FileHash": "8382993c3598a4a2e8d429b0d7a6f9f1",
"FileCRC": 0,
"FileSize": 9696,
"FileSize": 9704,
"Encrypted": false,
"Tags": [
"UI"
@ -1615,7 +1615,7 @@
"UnityCRC": 0,
"FileHash": "e0807c700d7f154aa3711c1bf07383d6",
"FileCRC": 0,
"FileSize": 34603,
"FileSize": 34611,
"Encrypted": false,
"Tags": [
"UI"

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

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