К содержимому

SusSettingsContent ​

SusSettingsContent

Панель настроек — volume slider, mute + dark-theme toggles, Apply / Back; персист через SusGameSettingsStore.

Пакет

SusGame · Экраны (коммерческий)

Открыть в песочнице

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 панель показывает строки по умолчанию (громкость, 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). Классом можно успокоить анимации своего скина одним селектором:

css
.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/BackTitleText / ApplyText / BackText + таблица SusGame
Заменить Items, чтобы добавить свои строкиSusGameSettingsCatalog.Register(item, get, set)
Своя обёртка store для ключа «reduce motion»SusGameSettingsCatalog.RegisterReduceMotion() → SusMotion.Reduce, класс sus-motion-reduce