跳转到内容

SusSettingsContent ​

SusSettingsContent

设置面板 — 音量滑块、静音 + 深色主题开关、Apply / Back;通过 SusGameSettingsStore 持久化。

包

SusGame · 屏幕(商业)

在 Playground 中打开

SusGame · Screens

属性

名称类型默认值
ItemsProp<List<SusSettingItem>>[]v-model来自预设
PresentationProp<string>"screen"
TitleTextProp<string>"Settings"
ApplyTextProp<string>"Apply"
BackTextProp<string>"Back"
ChangedTextProp<string>"changed"

插槽

没有插槽。

事件

没有公开事件。

样式钩子 ​

USS 类契约 — 无需改 C# 即可覆盖外观。状态通过这些类切换:

  • sus-flow-settings-category
  • sus-flow-settings-category-row
  • sus-flow-settings-dropdown
  • sus-flow-settings-row
  • sus-flow-settings-row-head
  • sus-flow-settings-slider
  • sus-flow-settings-toggle
  • sus-flow-settings-value
  • sus-flow-settings-vol-label
  • sus-settings-content
  • sus-settings-content__column
  • sus-settings-content__column--last
  • sus-settings-content__columns
  • sus-settings-content__crumbs
  • sus-settings-content__head

用法 ​

该面板由数据驱动:它为每个设置项(开关、滑块或下拉框)构建一行, 并通过 store 读/写数值。

xml
<template>
  <sus:SusSettingsContent />
</template>
csharp
var settings = new SusSettingsContent();
settings.LoadFromStore();
settings.ApplyBtn.OnClick += () => settings.SaveToStore(themeRoot: null);
settings.BackBtn.OnClick += () => { /* dismiss */ };
Prop / API作用
Items要显示的行。null(默认)= SusGameSettingsCatalog.DefaultItems,后接已注册的行
Store数值存储(ISusSettingsStore);默认适配器会持久化内置行和已注册的行
Presentation"screen"(默认)或 "modal"(仅根元素修饰符)
TitleText / ApplyText / BackText标题和按钮文字。默认 "Settings"、"Apply"、"Back"
ChangedText每行的“已更改”徽标。默认 "changed"
ApplyBtn / BackBtn宿主接线
Volume / VolumeLabel / VolumeChip / Mute / DarkTheme指向内置行控件的旧句柄,在构建行时填充(该行未显示时为 null)。为兼容现有宿主代码而保留;新代码请通过 Store 读写数值
LoadFromStore() / SaveToStore(themeRoot)从 store 拉取数值 / 推送数值(主题通过 SetAndApplyTheme)
ResolvedItems()面板当前显示的行

添加自己的行 ​

SusGameSettingsCatalog.Register(item, get, set) 可以添加应用自有的行,而无需替换 Items。默认 store 通过 get 读取当前值,并通过 set 写入已应用的值; 以相同 id 再次注册会原地替换之前的行。

csharp
SusGameSettingsCatalog.Register(
    new SusSettingItem { Id = "subtitles", Label = "Subtitles", Kind = SusSettingKind.Toggle, Default = true },
    get: () => MySettings.Subtitles,
    set: v => MySettings.Subtitles = (bool)v);
  • 当 Items = null 时,面板显示默认行(音量、静音、深色主题),后接 已注册的行。默认行本身不能被注册。
  • Unregister(id) 移除一行,ClearRegistered() 移除全部。
  • 面板在构建行时读取目录,因此请在面板显示之前注册。

Reduce motion 行 ​

SusGameSettingsCatalog.ReduceMotion 是一个内置开关,默认关闭,需要主动启用:它不属于 DefaultItems。用 SusGameSettingsCatalog.RegisterReduceMotion() 显示它(此时它 排在默认行之后),或者把它放进你自己的 Items。

加载时(LoadFromStore()),默认 store 只恢复应用级的 SusMotion.Reduce 标志;Apply 时(SaveToStore(themeRoot)),它还会在主题根上添加或移除 sus-motion-reduce 类。在玩家保存选择之前,这两个调用都不会改动该标志或该类。 若要从第一帧起就带上该类,请在主题根存在后调用一次 SusGameSettingsStore.ApplyMotion(themeRoot)。标志开启时,会循环播放的 kit 和 game 组件会暂停或静止(加载指示器、不确定态进度、文字特效、视差背景、search radar 扫描)。 用这个类,一个选择器就能让你自己皮肤的动画安静下来:

css
.sus-motion-reduce .my-skin__scanline {
    display: none;
}

本地化字符串 ​

SusGame 的每个可见默认字符串都是一个英文字面量,同一个字面量也是名为 SusGame 的 String Table Collection(SusGameText.Table)中的键。完整列表是 SusGameText.Entries:填写表格时把它当作清单。设置行和分类的 标签按其 Label 查找,因此你注册的行也会以同样方式翻译。

  • 你的值优先。 你自行设置的字符串 prop(例如 TitleText = "Options") 永远不会被翻译覆盖。
  • 缺少表格或条目 = 英文。 没有翻译的字符串保留其英文默认值。
  • 切换语言区域实时生效。 更改所选语言区域会重新翻译已绑定的字符串。
  • 未安装 Unity Localization(未安装 com.unity.localization)时显示英文默认值。 已安装 Localization 包但没有 Localization Settings 的项目同样保留英文 默认值。

键就是英文文本

由于键就是英文默认值本身,将来对英文默认值的修改同时也是 键的修改:旧的表格行不再匹配,该字符串会回退为英文。更新后请将你的 表格与 SusGameText.Entries 对照。

要以同样方式绑定你自己组件的 props,请使用 SusGameText.Bind(owner, (prop, "English text"), …), 对于其他表格,则使用 SusKit 中的 SusLocalization.BindWhileAttached(owner, table, pairs)。

备注 ​

  • 深色主题开关变化时立即生效(不等待 Apply)。
  • SaveToStore(null) 通过 SusThemeService.ResolveCascadeRoot(this) 解析 cascade root。

替换自定义变通做法 ​

自定义变通做法内置 API
按类名查找标题并写入 Apply/Back 按钮文字TitleText / ApplyText / BackText + SusGame 表
替换 Items 来添加自己的行SusGameSettingsCatalog.Register(item, get, set)
为“reduce motion”键自建 store 包装SusGameSettingsCatalog.RegisterReduceMotion() → SusMotion.Reduce,类 sus-motion-reduce