From 75aca41e5c680ef274387ed62153827b4b013523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=93=AE?= <834207172@qq.com> Date: Mon, 28 Jul 2025 17:51:38 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90m=E3=80=91=E5=A2=9E=E5=8A=A0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E7=8A=B6=E6=80=81=E5=8F=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/Utility/FSM/DefaultState.cs | 17 +-- .../Runtime/Utility/FSM/DefaultStateAsync.cs | 31 ++++ .../Utility/FSM/DefaultStateAsync.cs.meta | 3 + .../Runtime/Utility/FSM/FSMIState.cs | 33 +++-- .../Runtime/Utility/FSM/FSMIStateAsync.cs | 64 ++++++++ .../Utility/FSM/FSMIStateAsync.cs.meta | 3 + .../Runtime/Utility/FSM/FSMISystem.cs | 36 ++--- .../Runtime/Utility/FSM/FSMISystemAsync.cs | 137 ++++++++++++++++++ .../Utility/FSM/FSMISystemAsync.cs.meta | 3 + Assets/00.StaryEvo/package.json | 2 +- 10 files changed, 283 insertions(+), 46 deletions(-) create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs.meta create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs.meta create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs create mode 100644 Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs.meta diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultState.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultState.cs index b29feb7..20df18c 100644 --- a/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultState.cs +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultState.cs @@ -8,24 +8,15 @@ namespace Stary.Evo { } - public override UniTask OnExitAsync() + + public override void OnEnter() { - return UniTask.CompletedTask; + } - public override UniTask OnEnterAsync() + public override void OnExit() { - return UniTask.CompletedTask; - } - public override UniTask OnEnterAsync(T param) - { - return UniTask.CompletedTask; - } - - public override UniTask OnEnterAsync(T1 param1, T2 param2) - { - return UniTask.CompletedTask; } } } \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs new file mode 100644 index 0000000..4e51ab8 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs @@ -0,0 +1,31 @@ +using Cysharp.Threading.Tasks; + +namespace Stary.Evo +{ + public class DefaultStateAsync : AbstractFSMIStateAsync + { + public DefaultStateAsync(IFsmSystemAsync system) : base(system) + { + } + + public override UniTask OnExitAsync() + { + return UniTask.CompletedTask; + } + + public override UniTask OnEnterAsync() + { + return UniTask.CompletedTask; + } + + public override UniTask OnEnterAsync(T param) + { + return UniTask.CompletedTask; + } + + public override UniTask OnEnterAsync(T1 param1, T2 param2) + { + return UniTask.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs.meta b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs.meta new file mode 100644 index 0000000..b7bbc7d --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/DefaultStateAsync.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 220c409c3499492ca07525d7323eb17f +timeCreated: 1753696060 \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs index 95c4aab..ae2e318 100644 --- a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIState.cs @@ -9,20 +9,23 @@ namespace Stary.Evo IFsmSystem FsmSystem { get; } string Name { get; } - //进入该状态时调用 - UniTask OnEnterAsync(); - - UniTask OnEnterAsync(object param); - UniTask OnEnterAsync(T param); + //进入该状态时调用 + void OnEnter(); + + void OnEnter(object param); + + void OnEnter(T param); + + void OnEnter(T1 param1, T2 param2); + - UniTask OnEnterAsync(T1 param1, T2 param2); //每帧调用 void OnUpdate(); //退出该状态时调用 - UniTask OnExitAsync(); + void OnExit(); } public abstract class AbstractFSMIState : FSMIState @@ -36,21 +39,21 @@ namespace Stary.Evo Name = GetType().Name; } - public virtual UniTask OnEnterAsync(object param) + public virtual void OnEnter(object param) { - return UniTask.CompletedTask; + } - public virtual UniTask OnEnterAsync(T param) + public virtual void OnEnter(T param) { - return UniTask.CompletedTask; + } - public virtual UniTask OnEnterAsync(T1 param1, T2 param2) + public virtual void OnEnter(T1 param1, T2 param2) { - return UniTask.CompletedTask; + } - public abstract UniTask OnEnterAsync(); + public abstract void OnEnter(); public virtual void OnUpdate() { @@ -58,6 +61,6 @@ namespace Stary.Evo } - public abstract UniTask OnExitAsync(); + public abstract void OnExit(); } } \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs new file mode 100644 index 0000000..7796ef4 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs @@ -0,0 +1,64 @@ +using System; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace Stary.Evo +{ + public interface FSMIStateAsync + { + IFsmSystemAsync FsmSystem { get; } + string Name { get; } + + + //进入该状态时调用 + UniTask OnEnterAsync(); + + UniTask OnEnterAsync(object param); + + UniTask OnEnterAsync(T param); + + UniTask OnEnterAsync(T1 param1, T2 param2); + + //每帧调用 + void OnUpdate(); + //退出该状态时调用 + + UniTask OnExitAsync(); + } + + public abstract class AbstractFSMIStateAsync : FSMIStateAsync + { + public IFsmSystemAsync FsmSystem { get; } + public string Name { get; } + + public AbstractFSMIStateAsync(IFsmSystemAsync system) + { + FsmSystem = system; + Name = GetType().Name; + } + + public virtual UniTask OnEnterAsync(object param) + { + return UniTask.CompletedTask; + } + + public virtual UniTask OnEnterAsync(T param) + { + return UniTask.CompletedTask; + } + + public virtual UniTask OnEnterAsync(T1 param1, T2 param2) + { + return UniTask.CompletedTask; + } + public abstract UniTask OnEnterAsync(); + + public virtual void OnUpdate() + { + // Timer += Time.deltaTime; + } + + + public abstract UniTask OnExitAsync(); + } +} \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs.meta b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs.meta new file mode 100644 index 0000000..29a6774 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMIStateAsync.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 67ef9a881ef94206a5bc80eab8f8e2df +timeCreated: 1753695833 \ No newline at end of file diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs index 68c6ada..cd472dc 100644 --- a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystem.cs @@ -9,11 +9,11 @@ namespace Stary.Evo FSMIState CurState { get; set; } void AddState(FSMIState state); void RemoveState(FSMIState state); - UniTask SetCurState(string name); - - UniTask SetCurState(string name, object param); - UniTask SetCurState(string name, T param); - UniTask SetCurState(string name, T1 param1, T2 param2); + void SetCurState(string name); + + void SetCurState(string name, object param); + void SetCurState(string name, T param); + void SetCurState(string name, T1 param1, T2 param2); FSMIState GetStateWithName(string name); HashMap States { get; set; } } @@ -58,47 +58,49 @@ namespace Stary.Evo /// 普通状态切换,适用于无参 /// /// - public async UniTask SetCurState(string name) + public async void SetCurState(string name) { if (CurState != null) - await CurState.OnExitAsync(); + CurState.OnExit(); FSMIState state = GetStateWithName(name); CurState = state; - CurState.OnEnterAsync(); + CurState.OnEnter(); } + /// /// 异步状态切换,适用于有参 /// /// /// /// - public async UniTask SetCurState(string name, object param) + public async void SetCurState(string name, object param) { if (CurState != null) { - await CurState.OnExitAsync(); + CurState.OnExit(); } FSMIState state = GetStateWithName(name); CurState = state; - await CurState.OnEnterAsync(param); + CurState.OnEnter(param); } + /// /// 异步状态切换,适用于有参 /// /// /// /// - public async UniTask SetCurState(string name, T param) + public async void SetCurState(string name, T param) { if (CurState != null) { - await CurState.OnExitAsync(); + CurState.OnExit(); } FSMIState state = GetStateWithName(name); CurState = state; - await CurState.OnEnterAsync(param); + CurState.OnEnter(param); } /// @@ -109,16 +111,16 @@ namespace Stary.Evo /// /// /// - public async UniTask SetCurState(string name, T1 param1, T2 param2) + public async void SetCurState(string name, T1 param1, T2 param2) { if (CurState != null) { - await CurState.OnExitAsync(); + CurState.OnExit(); } FSMIState state = GetStateWithName(name); CurState = state; - await CurState.OnEnterAsync(param1, param2); + CurState.OnEnter(param1, param2); } public FSMIState GetStateWithName(string name) diff --git a/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs new file mode 100644 index 0000000..99ca9b0 --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs @@ -0,0 +1,137 @@ +using System.Collections.Generic; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace Stary.Evo +{ + public interface IFsmSystemAsync + { + FSMIStateAsync CurState { get; set; } + void AddState(FSMIStateAsync state); + void RemoveState(FSMIStateAsync state); + UniTask SetCurState(string name); + + UniTask SetCurState(string name, object param); + UniTask SetCurState(string name, T param); + UniTask SetCurState(string name, T1 param1, T2 param2); + FSMIStateAsync GetStateWithName(string name); + HashMap States { get; set; } + } + + public class FsmSystemAsync : IFsmSystemAsync + { + public FSMIStateAsync CurState { get; set; } + public HashMap States { get; set; } + + public FsmSystemAsync() + { + 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) + { + if (CurState != null) + await CurState.OnExitAsync(); + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + CurState.OnEnterAsync(); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + public async UniTask SetCurState(string name, object param) + { + if (CurState != null) + { + await CurState.OnExitAsync(); + } + + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + public async UniTask SetCurState(string name, T param) + { + if (CurState != null) + { + await CurState.OnExitAsync(); + } + + FSMIStateAsync state = GetStateWithName(name); + CurState = state; + await CurState.OnEnterAsync(param); + } + + /// + /// 异步状态切换,适用于有参 + /// + /// + /// + /// + /// + /// + public async UniTask SetCurState(string name, T1 param1, T2 param2) + { + if (CurState != null) + { + await CurState.OnExitAsync(); + } + + 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/Utility/FSM/FSMISystemAsync.cs.meta b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs.meta new file mode 100644 index 0000000..5d7185c --- /dev/null +++ b/Assets/00.StaryEvo/Runtime/Utility/FSM/FSMISystemAsync.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e04d52ffeda84bf4a096108e88667852 +timeCreated: 1753695847 \ No newline at end of file diff --git a/Assets/00.StaryEvo/package.json b/Assets/00.StaryEvo/package.json index c4b2497..5a4282f 100644 --- a/Assets/00.StaryEvo/package.json +++ b/Assets/00.StaryEvo/package.json @@ -1,6 +1,6 @@ { "name": "com.staryevo.main", - "version": "1.3.23", + "version": "1.3.24", "displayName": "00.StaryEvo", "description": "This is an Framework package(后台服务器版本,端口9527)", "unity": "2021.3",