# 游戏功能模块
**本文档引用的文件**
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向GFramework游戏功能模块,围绕以下主题提供系统化、可操作的技术文档:
- UI系统(UiRouterBase)的页面栈管理、层级系统与过渡管道实现
- 设置系统(SettingsSystem)的配置管理、持久化存储与实时应用机制
- 状态管理系统(GameStateMachineSystem)的有限状态机实现、状态转换逻辑与状态持久化策略
- 存储系统(FileStorage、ScopedStorage)的数据持久化方案与序列化器(JsonSerializer)实现
- 游戏抽象接口设计(IUiRouter、ISettingsSystem等)的理念、职责与使用方法
- 每个模块的配置选项、API参考与实际使用示例
- 最佳实践与性能优化建议
## 项目结构
本模块位于GFramework.Game与GFramework.Game.Abstractions两个工程中,分别提供具体实现与抽象接口。核心模块包括:
- UI路由与过渡:UiRouterBase、UiTransitionPipeline、IUiRouter、IUiTransitionHandler、UiLayer
- 设置系统:SettingsSystem、SettingsModel、SettingsPersistence、ISettingsSystem
- 存储系统:FileStorage、ScopedStorage、JsonSerializer
- 状态系统:GameStateMachineSystem
```mermaid
graph TB
subgraph "UI"
UIR["UiRouterBase"]
UIP["UiTransitionPipeline"]
IUR["IUiRouter 接口"]
IUTH["IUiTransitionHandler 接口"]
UL["UiLayer 枚举"]
end
subgraph "设置"
SS["SettingsSystem"]
SM["SettingsModel"]
SP["SettingsPersistence"]
ISS["ISettingsSystem 接口"]
end
subgraph "存储"
FS["FileStorage"]
SC["ScopedStorage"]
JS["JsonSerializer"]
end
subgraph "状态"
GSM["GameStateMachineSystem"]
end
UIR --> UIP
UIR -.实现.-> IUR
UIP -.处理.-> IUTH
UIR --> UL
SS --> SM
SS -.使用.-> ISS
SP --> FS
SP --> SC
FS --> JS
```
图表来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs#L11-L32)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
章节来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs#L11-L32)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
## 核心组件
- UI路由与过渡
- UiRouterBase:提供页面栈管理、层级管理、路由守卫、过渡管道注册与执行
- UiTransitionPipeline:按阶段与优先级执行UI切换处理器
- IUiRouter/IUiTransitionHandler:定义路由与过渡扩展点的接口契约
- UiLayer:定义页面层与浮层的层级体系
- 设置系统
- SettingsSystem:集中应用设置,触发事件
- SettingsModel:聚合数据设置与可应用设置
- SettingsPersistence:封装设置的加载、保存、删除与批量操作
- ISettingsSystem:对外暴露设置应用接口
- 存储系统
- FileStorage:基于文件系统的键值存储,带key级锁保证线程安全
- ScopedStorage:为存储键加前缀的作用域包装器
- JsonSerializer:基于Newtonsoft.Json的序列化实现
- 状态系统
- GameStateMachineSystem:在上下文感知的状态机之上提供类型查询与断言能力
章节来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs#L11-L32)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
## 架构总览
UI系统通过“页面栈 + 层级系统 + 过渡管道”的组合实现UI导航与切换;设置系统通过“模型 + 持久化 + 应用器”三层协作实现配置的读取、应用与事件通知;存储系统提供线程安全的键值存储与作用域隔离;状态系统在通用状态机之上提供类型化查询。
```mermaid
sequenceDiagram
participant Caller as "调用方"
participant Router as "UiRouterBase"
participant Pipeline as "UiTransitionPipeline"
participant Handlers as "IUiTransitionHandler"
participant Root as "IUiRoot"
participant Factory as "IUiFactory"
Caller->>Router : Push(uiKey, param, policy, instancePolicy)
Router->>Router : BeforeChange(event)
Router->>Pipeline : ExecuteAsync(event, BeforeChange)
Pipeline->>Handlers : HandleAsync(event)
Handlers-->>Pipeline : 完成/超时/取消
Router->>Factory : GetOrCreate(uiKey, instancePolicy)
Factory-->>Router : IUiPageBehavior
Router->>Root : AddUiPage(page)
Router->>Router : OnEnter/OnShow(page)
Router->>Router : AfterChange(event)
Router->>Pipeline : ExecuteAsync(event, AfterChange)
Pipeline->>Handlers : HandleAsync(event)
```
图表来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L80-L100)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L63-L101)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
## 详细组件分析
### UI系统:页面栈管理、层级系统与过渡管道
- 页面栈管理
- 支持Push(基于uiKey或已有页面)、Pop、Replace、Clear等操作
- 栈顶元素通过Peek/PeekKey/IsTop/Contains等方法访问
- 过渡策略(UiTransitionPolicy)与实例策略(UiInstancePolicy)控制页面生命周期与复用
- 层级系统(非栈)
- 通过UiLayer枚举区分Page、Overlay、Modal、Toast、Topmost等
- Show/Hide/ClearLayer管理浮层显示与回收
- 过渡管道
- UiTransitionPipeline按阶段(BeforeChange/AfterChange)与优先级执行处理器
- 支持超时、取消令牌、错误继续策略
- 路由守卫
- 支持注册/移除守卫,按优先级执行进入/离开守卫,支持中断与异常处理
```mermaid
classDiagram
class UiRouterBase {
+int Count
+void BindRoot(root)
+void Push(...)
+void Pop(policy)
+void Replace(...)
+void Clear()
+string PeekKey()
+IUiPageBehavior Peek()
+bool IsTop(uiKey)
+bool Contains(uiKey)
+void RegisterHandler(handler, options)
+void UnregisterHandler(handler)
+void AddGuard(guard)
+void RemoveGuard(guard)
}
class UiTransitionPipeline {
+void RegisterHandler(handler, options)
+void UnregisterHandler(handler)
+Task ExecuteAsync(event, phases, ct)
}
class IUiRouter
class IUiTransitionHandler
class UiLayer
UiRouterBase ..> UiTransitionPipeline : "使用"
UiRouterBase ..|> IUiRouter
UiTransitionPipeline --> IUiTransitionHandler : "执行"
UiRouterBase --> UiLayer : "使用"
```
图表来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
章节来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
### 设置系统:配置管理、持久化存储与实时应用
- SettingsSystem
- 负责集中应用设置,遍历模型中的设置节并调用可应用设置的Apply方法
- 发送应用开始/完成事件,异常时发送失败事件并向上抛出
- SettingsModel
- 聚合两类设置:数据设置(ISettingsData)与可应用设置(IApplyAbleSettings)
- 提供GetData/RegisterApplicator/GetApplicator/TryGet/All等方法
- SettingsPersistence
- 基于存储接口(IStorage)实现设置的Load/Save/Delete/LoadAll/SaveAll
- 通过事件总线发布加载、保存、删除、批量保存等事件
- 键名规则:Settings_{TypeName}
```mermaid
flowchart TD
Start(["开始"]) --> GetSection["获取设置节
TryGet/GetData"]
GetSection --> CheckApply{"是否实现IApplyAbleSettings?"}
CheckApply --> |否| End(["结束"])
CheckApply --> |是| SendApplying["发送SettingsApplyingEvent"]
SendApplying --> Apply["调用Apply()"]
Apply --> Success{"是否成功?"}
Success --> |是| SendApplied["发送SettingsAppliedEvent(true)"]
Success --> |否| SendFailed["发送SettingsAppliedEvent(false, ex)"] --> Throw["抛出异常"]
SendApplied --> End
Throw --> End
```
图表来源
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L83-L98)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L65-L94)
章节来源
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs#L11-L32)
### 存储系统:数据持久化与序列化
- FileStorage
- 基于文件系统,键转路径时进行安全清理与路径校验,防止路径逃逸
- 每个key持有独立锁对象,确保并发读写安全
- 支持同步/异步读写、存在性检查、删除
- 使用ISerializer进行序列化/反序列化
- ScopedStorage
- 对所有键统一添加前缀,形成作用域隔离
- 提供Scope方法创建子作用域
- JsonSerializer
- 基于Newtonsoft.Json的Serialize/Deserialize实现
```mermaid
classDiagram
class FileStorage {
-string _rootPath
-string _extension
-ConcurrentDictionary~string,object~ _keyLocks
-ISerializer _serializer
+bool Exists(key)
+Task~bool~ ExistsAsync(key)
+T Read~T~(key)
+T Read~T~(key, default)
+Task~T~ ReadAsync~T~(key)
+void Write~T~(key, value)
+Task WriteAsync~T~(key, value)
+void Delete(key)
}
class ScopedStorage {
-IStorage _inner
-string _prefix
+bool Exists(key)
+Task~bool~ ExistsAsync(key)
+T Read~T~(key)
+T Read~T~(key, default)
+Task~T~ ReadAsync~T~(key)
+void Write~T~(key, value)
+Task WriteAsync~T~(key, value)
+void Delete(key)
+IStorage Scope(scope)
}
class JsonSerializer {
+string Serialize~T~(value)
+T Deserialize~T~(data)
}
FileStorage --> JsonSerializer : "使用"
ScopedStorage --> IStorage : "包装"
```
图表来源
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
章节来源
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
### 状态管理系统:有限状态机与查询
- GameStateMachineSystem
- 在通用状态机系统基础上提供类型化查询:IsIn()与Get()
- 便于在业务层以强类型方式判断与获取当前状态
章节来源
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
### 抽象接口设计与使用方法
- IUiRouter
- 职责:UI导航与切换的统一入口,包含Push/Pop/Replace/Clear、层级管理、守卫与处理器注册
- 使用要点:通过BindRoot绑定UI根节点;在RegisterHandlers中注册默认处理器;利用策略参数控制页面生命周期
- ISettingsSystem
- 职责:集中应用设置,支持单类型、多类型与全部设置的应用
- 使用要点:在系统初始化后调用ApplyAll或按需调用Apply
- 其他接口
- IUiTransitionHandler:定义处理器优先级、适用阶段、过滤条件与异步处理逻辑
- UiLayer:定义页面层与浮层的层级体系,用于Show/Hide等非栈管理
章节来源
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [ISettingsSystem.cs](file://GFramework.Game.Abstractions/setting/ISettingsSystem.cs#L11-L32)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [UiLayer.cs](file://GFramework.Game.Abstractions/enums/UiLayer.cs#L7-L33)
## 依赖关系分析
- UI路由依赖
- 依赖IUiRoot与IUiFactory以管理页面生命周期与实例复用
- 通过UiTransitionPipeline与IUiTransitionHandler解耦过渡逻辑
- 通过路由守卫实现可插拔的进入/离开控制
- 设置系统依赖
- SettingsSystem依赖ISettingsModel;SettingsModel聚合数据与应用器
- SettingsPersistence依赖IStorage与事件总线,负责持久化与批量操作
- 存储系统依赖
- FileStorage依赖ISerializer;ScopedStorage依赖IStorage
- 状态系统依赖
- GameStateMachineSystem基于通用状态机系统,提供类型化查询
```mermaid
graph LR
UIR["UiRouterBase"] --> |使用| IUR["IUiRouter"]
UIR --> |注册| UIP["UiTransitionPipeline"]
UIP --> |执行| IUTH["IUiTransitionHandler"]
SS["SettingsSystem"] --> |读取| SM["SettingsModel"]
SP["SettingsPersistence"] --> |读写| IStorage["IStorage"]
FS["FileStorage"] --> |实现| IStorage
SC["ScopedStorage"] --> |包装| IStorage
FS --> JS["JsonSerializer"]
GSM["GameStateMachineSystem"] --> |扩展| StateMachine["通用状态机"]
```
图表来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [IUiRouter.cs](file://GFramework.Game.Abstractions/ui/IUiRouter.cs#L9-L138)
- [IUiTransitionHandler.cs](file://GFramework.Game.Abstractions/ui/IUiTransitionHandler.cs#L10-L39)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
章节来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L13-L314)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L11-L168)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99)
- [SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103)
- [SettingsPersistence.cs](file://GFramework.Game/setting/SettingsPersistence.cs#L12-L141)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L11-L258)
- [ScopedStorage.cs](file://GFramework.Game/storage/ScopedStorage.cs#L11-L99)
- [JsonSerializer.cs](file://GFramework.Game/serializer/JsonSerializer.cs#L9-L29)
- [GameStateMachineSystem.cs](file://GFramework.Game/state/GameStateMachineSystem.cs#L9-L26)
## 性能考量
- UI过渡
- 使用AfterChange异步执行避免阻塞主线程
- 通过UiInstancePolicy控制实例复用,减少频繁创建/销毁开销
- 路由守卫应尽量短小、异步化,避免长时间阻塞
- 存储
- FileStorage按key加锁,避免并发写冲突;读多写少场景建议使用异步读取
- ScopedStorage提供作用域隔离,避免键冲突与命名污染
- JsonSerializer序列化成本与数据大小相关,建议对大对象分片或压缩
- 设置系统
- ApplyAll按需调用,避免频繁全量应用
- SettingsPersistence的批量保存可减少多次IO
## 故障排查指南
- UI路由
- 若Push被忽略:确认IsTop判断与路由守卫返回值
- Pop被拦截:检查离开守卫CanLeaveAsync返回值
- 过渡卡住:检查UiTransitionHandler超时与ContinueOnError配置
- 设置系统
- Apply失败:查看SettingsAppliedEvent携带的异常信息
- 加载不到数据:确认键名规则Settings_{TypeName}与存储路径一致
- 存储
- 文件不存在:确认键名与扩展名、目录创建逻辑
- 并发写冲突:确认key锁是否生效,避免跨key共享同一锁对象
- 路径逃逸:检查键名中是否包含非法字符或“..”
章节来源
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L84-L88)
- [UiRouterBase.cs](file://GFramework.Game/ui/UiRouterBase.cs#L148-L152)
- [UiTransitionPipeline.cs](file://GFramework.Game/ui/UiTransitionPipeline.cs#L127-L153)
- [SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L93-L97)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L72-L103)
- [FileStorage.cs](file://GFramework.Game/storage/FileStorage.cs#L246-L254)
## 结论
本模块通过清晰的抽象接口与可插拔的实现,提供了稳定可靠的UI导航、设置管理、数据持久化与状态管理能力。遵循本文档的最佳实践与配置建议,可在保证性能与可维护性的前提下快速构建复杂的游戏功能模块。
## 附录
- API参考与配置选项
- UI路由
- Push/Pop/Replace/Clear:支持策略参数与实例策略
- RegisterHandler/UnregisterHandler:注册过渡处理器与选项
- AddGuard/RemoveGuard:注册路由守卫与优先级
- 设置系统
- Apply/ApplyAll/Apply(IEnumerable):应用设置
- SettingsModel:GetData/RegisterApplicator/TryGet/All
- SettingsPersistence:Load/Save/Delete/LoadAll/SaveAll
- 存储系统
- FileStorage:Write/Read/Exists/Delete,支持同步/异步
- ScopedStorage:Scope创建子作用域
- JsonSerializer:Serialize/Deserialize
- 实际使用示例(步骤说明)
- UI页面切换
- 在模块初始化中注册UiRouter与IUiRoot
- 在RegisterHandlers中注册默认过渡处理器
- 调用Push/Pop/Replace进行页面切换
- 设置应用
- 在SettingsModel中注册可应用设置
- 通过SettingsSystem.ApplyAll应用设置
- 使用SettingsPersistence.Load/Save进行持久化
- 数据存储
- 使用FileStorage进行键值读写
- 使用ScopedStorage进行作用域隔离
- 使用JsonSerializer进行序列化