跳转到正文

设置模型与 Provider

作

作者

作者

创建时间: 2026年10月19日更新时间: 2026年10月19日

目录

Sub系统与注册表

UGSS_GameSettingsSubsystem 是 Local Player Subsystem,负责创建和持有 UGSS_GameSettingRegistry。Registry 汇总设置树、按 SettingId 查找节点、过滤可见项,并发出值变化、Apply、Action、导航和编辑状态事件。

Definition Data Asset 适合静态、可复用的设置树;UGSS_GameSettingsProvider 适合依赖运行时状态、需要动态注册或注销的设置。Provider 应通过传入的 UGSS_GameSettingsBuilder 添加节点,以便子系统统一跟踪生命周期、依赖和待提交状态。

设置树与标识

使用 Page 和 Collection 组织导航和值节点;值节点可表示 Bool、Discrete、Scalar 或 Action。每个设置都应使用稳定且全局唯一的 Gameplay Tag 作为 SettingId。不要依赖显示名称或开发者名称作为跨系统引用。

Provider Builder 提供 AddBool、AddDiscrete、AddScalar、AddAction 等入口。C++ Provider 在注册时构建节点;蓝图 Provider 使用类型化的 Add 节点。需要移除动态内容时,用注册令牌注销对应 Provider,避免留下过期的节点与事件绑定。

Accessor 与存储

  • Local Accessor 连接项目的本地引擎设置,常用于 UGameUserSettings 所拥有的机器级选项。
  • Shared Accessor 连接当前 Local Player 的 UGSS_SettingsShared。项目可继承该类,添加 SaveGame 属性及匹配签名的 Getter/Setter。

Accessor 的 Getter/Setter 使用反射函数。项目自定义 Shared Settings 时,重写 ApplySettings 将已加载的偏好应用到项目系统;需要额外持久化时重写 SaveSettings。默认 Shared 保存使用 LocalPlayer SaveGame 的异步写入。

修改与提交

普通待应用节点由 Apply 提交;Cancel 恢复 Registry 跟踪的基线;Reload 丢弃待编辑内容并重新读取存储值。Dynamic Discrete/Scalar 会立即调用 Accessor,以支持预览;ApplyChanges 负责持久化,而项目应为即时预览定义明确的恢复行为。

编辑条件可以控制隐藏、禁用、排除选项或是否允许重置。条件依赖通过 SettingId 建立,注册与注销后由 Registry 重新解析依赖。跨 Provider 依赖时,确保 SettingId 不冲突且目标节点确实存在。