From d4ab678529ea8b081296c56cea04d0217519a5ec Mon Sep 17 00:00:00 2001 From: stary <834207172@qq.COM> Date: Mon, 13 Apr 2026 17:59:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8D=B8=E8=BD=BD=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/Tool/FSM/FSMIStateAsync.cs | 11 +- .../Tool/FSM/FSMISystemJustEnterAsync.cs | 107 ++++++++++++++++++ .../Tool/FSM/FSMISystemJustEnterAsync.cs.meta | 3 + Assets/00.StaryEvo/package.json | 2 +- .../HybridLoad/Fsm/DomainAssetSystem.cs | 33 +++++- .../Runtime/HybridLoad/Fsm/HotFixDllState.cs | 7 -- .../HybridLoad/Fsm/HotFixStartState.cs | 5 - .../HybridLoad/Fsm/ResEditorSimulateState.cs | 6 - .../Runtime/HybridLoad/Fsm/ResStartState.cs | 24 +--- .../Runtime/HybridLoad/HybridClREntrance.cs | 2 +- Assets/00.StaryEvoTools/package.json | 2 +- 11 files changed, 155 insertions(+), 47 deletions(-) create mode 100644 Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs create mode 100644 Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs.meta diff --git a/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMIStateAsync.cs b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMIStateAsync.cs index 7796ef4..c2dc3a2 100644 --- a/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMIStateAsync.cs +++ b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMIStateAsync.cs @@ -51,7 +51,11 @@ namespace Stary.Evo { return UniTask.CompletedTask; } - public abstract UniTask OnEnterAsync(); + + public virtual UniTask OnEnterAsync() + { + return UniTask.CompletedTask; + } public virtual void OnUpdate() { @@ -59,6 +63,9 @@ namespace Stary.Evo } - public abstract UniTask OnExitAsync(); + public virtual UniTask OnExitAsync() + { + return UniTask.CompletedTask; + } } } \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs new file mode 100644 index 0000000..b0c5664 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs @@ -0,0 +1,107 @@ +using System.Collections.Generic; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace Stary.Evo +{ + public class FSMISystemJustEnterAsync : IFsmSystemAsync + { + public FSMIStateAsync CurState { get; set; } + public HashMap States { get; set; } + + public FSMISystemJustEnterAsync() + { + States = new HashMap(); + AddState(new DefaultStateAsync(this)); + } + + public void AddState(FSMIStateAsync state) + { + Debug.Log(state.Name); + if (!States.ContainsKey(state.Name)) + { + States.Add(state.Name, state); + } + else + { + Debug.LogErrorFormat("States状态机容器里已存在名字为--【{0}】--的状态", state.Name.ToString()); + } + } + + + public void RemoveState(FSMIStateAsync state) + { + if (States.ContainsKey(state.Name)) + { + States.Remove(state.Name); + } + else + { + Debug.LogErrorFormat("States状态机容器里不存在名字为--【{0}】--的状态", state.Name.ToString()); + } + } + + /// + /// 普通状态切换,适用于无参 + /// + /// + public async UniTask SetCurState(string name) + { + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + public async UniTask SetCurState(string name, object param) + { + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + public async UniTask SetCurState(string name, T param) + { + + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + /// + /// + public async UniTask SetCurState(string name, T1 param1, T2 param2) + { + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param1, param2); + } + + public FSMIStateAsync GetStateWithName(string name) + { + if (States.ContainsKey(name)) + { + return States[name]; + } + + return null; + } + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs.meta b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs.meta new file mode 100644 index 0000000..d7c1457 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Tool/FSM/FSMISystemJustEnterAsync.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd9789f73a43448d96430dfe7ce4a3fb +timeCreated: 1776067472 \ No newline at end of file diff --git a/Assets/00.StaryEvo/package.json b/Assets/00.StaryEvo/package.json index 2ec1404..4b03be2 100644 --- a/Assets/00.StaryEvo/package.json +++ b/Assets/00.StaryEvo/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.main", - "version": "2.1.8", + "version": "2.1.9", "displayName": "00.StaryEvo", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3", diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs index 980128c..9fe6cdc 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/DomainAssetSystem.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text.RegularExpressions; using Cysharp.Threading.Tasks; using Main; @@ -118,16 +119,36 @@ namespace Stary.Evo hotfixInstance.OnEnterAsync(""); } - public static async UniTask UnloadDomainAsset() + public static async UniTask RemoveDomain(DomainConfig domainConfig) { + bool isQuit = (domainConfig.loadResType == DomainConfig.LoadResType.Prefab && + domainConfig.domainLoadType == DomainConfig.DomainLoadType.Single) || + (domainConfig.loadResType == DomainConfig.LoadResType.Scene && + domainConfig.loadSceneMode == LoadSceneMode.Single); + if (isQuit) + return; foreach (var entity in _domainNameEntities) { + if (entity.loadResType == DomainConfig.LoadResType.Prefab) + { + await DomainAssetSystem.UnloadDomainAsset(entity); + } + else if (entity.loadResType == DomainConfig.LoadResType.Scene) + { + await DomainAssetSystem.UnloadSceneAsset(entity); + } + + } + } + + public static async UniTask UnloadDomainAsset(DomainConfig config) + { if (HybridClREntrance.Global.stage == StageType.Developer) { - var mainPrefab = GameObject.Find(entity.domain); + var mainPrefab = GameObject.Find(config.domain); if (mainPrefab == null) { - Debug.LogError($"UnityEvo:{entity.domain}不存在,无法卸载"); + Debug.LogError($"UnityEvo:{config.domain}不存在,无法卸载"); return; } @@ -147,15 +168,15 @@ namespace Stary.Evo await ForceUnloadAllAssets(domainBase.DomainNameRaw); } - Debug.Log($"UnityEvo:{entity.domain} 退出成功..."); + Debug.Log($"UnityEvo:{config.domain} 退出成功..."); } else if (HybridClREntrance.Global.stage == StageType.Originality) { - await ForceUnloadAllAssets(entity.domain); + await ForceUnloadAllAssets(config.domain); AppConfig.PackageDomainName = ""; Debug.Log("UnityEvo:Domain退出..."); } - } + } public static async UniTask UnloadSceneAsset(DomainConfig config) diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs index 9124bd3..8f1abf4 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixDllState.cs @@ -251,13 +251,6 @@ namespace Stary.Evo return null; } - - public override UniTask OnExitAsync() - { - _sAssetDatas.Clear(); - return UniTask.CompletedTask; - } - #region 补充元数据 // //补充元数据dll的列表 diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs index 5529841..1c0e5c1 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/HotFixStartState.cs @@ -99,11 +99,6 @@ namespace Stary.Evo #endif } - public override UniTask OnExitAsync() - { - return UniTask.CompletedTask; - } - #region PLAYMODE private async UniTask EDITOR_SIMULATEMODE(ResourcePackage package) diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs index 7fdbfee..da0ab00 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResEditorSimulateState.cs @@ -112,12 +112,6 @@ namespace Stary.Evo } - - public override UniTask OnExitAsync() - { - return UniTask.CompletedTask; - } - #region 下载热更资源 public async UniTask Download() diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs index 9f123ba..9693e39 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs @@ -15,12 +15,6 @@ namespace Stary.Evo public ResStartState(IFsmSystemAsync system) : base(system) { } - - public override UniTask OnEnterAsync() - { - return UniTask.CompletedTask; - } - public override async UniTask OnEnterAsync(T1 param1, T2 param2) { if (AppConfig.DeveloperMode) @@ -29,6 +23,10 @@ namespace Stary.Evo Type type = param2 as Type; GameObject mainPrefab = null; + + //加载前卸载资源 + await DomainAssetSystem.RemoveDomain(domainConfig); + switch (domainConfig.loadResType) { case DomainConfig.LoadResType.Prefab: @@ -55,6 +53,7 @@ namespace Stary.Evo SceneManager.SetActiveScene(targetScene); mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig); SceneManager.MoveGameObjectToScene(mainPrefab, targetScene); + DomainAssetSystem.AddDomainNameEntity(domainConfig); break; } @@ -64,17 +63,6 @@ namespace Stary.Evo } - public override async UniTask OnExitAsync() - { - if (domainConfig.loadResType == DomainConfig.LoadResType.Prefab && - domainConfig.domainLoadType == DomainConfig.DomainLoadType.Single) - { - await DomainAssetSystem.UnloadDomainAsset(); - } - else if (domainConfig.loadResType == DomainConfig.LoadResType.Scene) - { - await DomainAssetSystem.UnloadSceneAsset(domainConfig); - } - } + } } \ No newline at end of file diff --git a/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs b/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs index de90ec5..821c00f 100644 --- a/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs +++ b/Assets/00.StaryEvoTools/Runtime/HybridLoad/HybridClREntrance.cs @@ -30,7 +30,7 @@ namespace Stary.Evo return; } - _loadSystem = new FsmSystemAsync(); + _loadSystem = new FSMISystemJustEnterAsync(); // 初始化日志 _loadSystem.AddState(new HotFixStartState(_loadSystem)); _loadSystem.AddState(new ResEditorSimulateState(_loadSystem)); diff --git a/Assets/00.StaryEvoTools/package.json b/Assets/00.StaryEvoTools/package.json index f0fad5e..c654f43 100644 --- a/Assets/00.StaryEvoTools/package.json +++ b/Assets/00.StaryEvoTools/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.tools", - "version": "1.4.0", + "version": "1.4.1", "displayName": "00.StaryEvo.Tools", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3",