SusSettingsContent

Панель настроек — volume slider, mute + dark-theme toggles, 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панель показывает строки по умолчанию (громкость, mute, тёмная тема), а за ними зарегистрированные строки. Сами строки по умолчанию зарегистрировать нельзя. 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 ставятся на паузу или замирают, пока флаг включён (спиннеры, indeterminate-прогресс, текстовые эффекты, parallax-фоны, развёртка search radar). Классом можно успокоить анимации своего скина одним селектором:
.sus-motion-reduce .my-skin__scanline {
display: none;
}Локализованные строки
Каждая видимая строка по умолчанию в SusGame — английский литерал, и тот же литерал служит ключом в String Table Collection с именем SusGame (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"), …) или, для других таблиц, SusLocalization.BindWhileAttached(owner, table, pairs) из SusKit.
Заметки
- Переключатель тёмной темы применяется сразу при изменении (не ждёт Apply).
SaveToStore(null)разрешает cascade root черезSusThemeService.ResolveCascadeRoot(this).
Замена самодельных обходов
| Самодельный обход | Встроенный API |
|---|---|
| Найти заголовок по классу и записать тексты кнопок Apply/Back | TitleText / ApplyText / BackText + таблица SusGame |
Заменить Items, чтобы добавить свои строки | SusGameSettingsCatalog.Register(item, get, set) |
| Своя обёртка store для ключа «reduce motion» | SusGameSettingsCatalog.RegisterReduceMotion() → SusMotion.Reduce, класс sus-motion-reduce |