用途
该技能面向 Unity 游戏开发,提供状态机(State Machine)的实现模式,用于管理游戏流程、UI 导航、AI 行为状态、动画状态控制以及功能/活动控制器等场景。其重点在于安全地处理异步状态转移与资源清理。
主要能力
基础状态机
通过 IState 接口定义状态契约,包含 Enter、Exit、Suspend、Resume 和 GetTransitionData 方法,均基于 UniTask 实现异步。BaseState 抽象类提供 IsActive、IsSuspended 状态标记以及可重写的 OnEnter、OnExit、OnSuspend、OnResume 钩子。
状态导航控制器
StateNavigationController 实现 IStateNavigator,内部维护一个 LifetimeScope 状态栈,并通过 _navigationInProgress 标志处理并发导航。提供 NavigateTo(退出所有当前状态后进入新状态)、NavigateToAdditive(挂起当前状态后叠加进入新状态)、ExitActiveState(弹出并退出栈顶状态,恢复下层状态)以及 Shutdown 方法。ExitActiveState 与 ExitAllStates 中在释放作用域前调用 await UniTask.Yield(),属于其强调的清理安全做法。
Activity 状态模式
ActivityState<TController> 将状态委托给 IActivityController 处理。ActivityController<TData, TView> 提供 Initialize、Shutdown、Suspend、Resume 流程,内部使用 CancellationTokenSource 管理生命周期,并在关闭时取消挂起操作、播放退出动画(非应用退出时)、释放视图。
分层状态机(HSM)
HierarchicalStateMachine 支持通过 AddState 注册带父状态 ID 的状态,切换时计算当前状态与目标状态的路径,找到最近公共祖先,退出到该祖先后再逐级进入目标状态。
状态机模式
包含转移守卫(GuardedStateMachine 通过 AddGuard 与 CanTransition 控制是否允许转移)、转移动作与事件(OnStateTransition、OnStateEntered、OnStateExited)、状态历史(StateMachineWithHistory 支持 GoBack,MaxHistorySize 默认 20,并提供 ClearHistory)。
清理模式
SafeStateController 演示通过取消令牌实现安全异步释放,并在 Shutdown 中支持优雅取消等待;IForceHideable 接口与 ActivityState 实现 ForceHiddenSuspend / ReleaseForceHidden 用于强制隐藏状态的处理。
使用方式
资料中给出了各模式的完整 C# 代码示例,包括接口定义、抽象基类、控制器实现与分层状态机等,开发者可参考这些代码在 Unity 项目中集成。文档未提供安装命令、包依赖或具体接入步骤。
适用场景
- 游戏状态管理(菜单、加载、玩法)
- UI 导航流程
- AI 行为状态
- 动画状态控制
- 功能/活动控制器
限制
资料未说明兼容的 Unity 版本、是否需要额外依赖(如 UniTask、VContainer/LifetimeScope 的安装方式)、性能开销或收费信息,这些暂未提供。