SusSettingsContent

设置面板 — 音量滑块、静音 + 深色主题开关、Apply / Back;通过 SusGameSettingsStore 持久化。
包
SusGame · 屏幕(商业)
属性
| 名称 | 类型 | 默认值 | |
|---|---|---|---|
Items | Prop<List<SusSettingItem>> | [] | v-model |
Presentation | Prop<string> | "screen" | |
TitleText | Prop<string> | "Settings" | |
ApplyText | Prop<string> | "Apply" | |
BackText | Prop<string> | "Back" | |
ChangedText | Prop<string> | "changed" |
插槽
事件
样式钩子
USS 类契约 — 无需改 C# 即可覆盖外观。状态通过这些类切换:
sus-flow-settings-categorysus-flow-settings-category-rowsus-flow-settings-dropdownsus-flow-settings-rowsus-flow-settings-row-headsus-flow-settings-slidersus-flow-settings-togglesus-flow-settings-valuesus-flow-settings-vol-labelsus-settings-contentsus-settings-content__columnsus-settings-content__column--lastsus-settings-content__columnssus-settings-content__crumbssus-settings-content__head
用法
该面板由数据驱动:它为每个设置项(开关、滑块或下拉框)构建一行, 并通过 store 读/写数值。
<template>
<sus:SusSettingsContent />
</template>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 再次注册会原地替换之前的行。
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 扫描)。 用这个类,一个选择器就能让你自己皮肤的动画安静下来:
.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 |