DebugSystem (Unity)
ScriptableObject-ассет настроек отладки с toggle-кнопками для каждой системы.
Назначение
DebugSettings — SettingsPreset (ScriptableObject), хранящий глобальный DebugMode и локальные toggle для каждой системы. Partial-расширения из других пакетов добавляют свои toggle автоматически.
- Глобальный переключатель
DebugMode(gate для всех локальных) - Локальные toggle:
appStates,inputLogs,uiLogs,asyncTweenerLogs - Каждый локальный toggle — partial-расширение
DebugSettingsиз соответствующей системы - Итоговое свойство:
XxxDebugMode => DebugMode && xxxToggle - Меню
Tools/Vortex/Configs/Debug Settingsдля быстрого доступа к ассету (пингует ассетStartSettings)
Вне ответственности: логика логирования, Core-свойства SettingsModel — это Core (Layer 1).
Зависимости
Vortex.Unity.SettingsSystem.Presets—SettingsPreset(базовый класс)Vortex.Unity.EditorTools.Attributes—[ToggleButton],[Position]Sirenix.OdinInspector—[PropertyOrder]
Архитектура
DebugSettings (partial, SettingsPreset)
├── DebugSettings.cs — debugMode (глобальный gate)
├── AppSystem/Debug/ → appStates → AppStateDebugMode
├── InputBusSystem/Debug/Presets/ → inputLogs → InputDebugMode
├── UIProviderSystem/Debug/Presets/ → uiLogs → UiDebugMode
└── UI/TweenerSystem/Debug/Presets/ → asyncTweenerLogs → AsyncTweenerDebugMode
MenuController (Editor)
└── Tools/Vortex/Configs/Debug Settings — пинг ассета StartSettings
Паттерн расширения
Каждая система добавляет partial DebugSettings со своим toggle:
public partial class DebugSettings
{
[SerializeField] [ToggleButton(isSingleButton: true)] private bool myToggle;
public bool MyDebugMode => DebugMode && myToggle;
}
Свойство MyDebugMode будет true только при включённых DebugMode И myToggle.
Контракт
Вход
- Ассет
DebugSettingsв проекте (создаётся какSettingsPreset) - Значения toggle — через Inspector
Выход
DebugMode— глобальный bool- Локальные свойства:
AppStateDebugMode,InputDebugMode,UiDebugMode,AsyncTweenerDebugMode - Все свойства доступны через
Settings.Data()(копируются вSettingsModelпри загрузке)
Гарантии
[PropertyOrder(-100)](Odin) —DebugModeотрисовывается первым в Inspector- Все локальные toggle зависят от
DebugMode— выключение глобального отключает все
Ограничения
- Partial-расширения разбросаны по разным пакетам — полный список toggle виден только в Inspector ассета
- Добавление нового toggle требует assembly reference на
ru.vortex.unity.debug
Использование
Настройка
- Создать ассет
DebugSettings(или использовать существующий вStartSettings) - Включить
DebugMode(глобальный gate) - Включить нужные локальные toggle
Доступ к ассету
Меню: Tools/Vortex/Configs/Debug Settings (пингует ассет StartSettings)
Проверка в коде
// Через SettingsModel (заполняется из DebugSettings)
if (Settings.Data().AppStateDebugMode)
Log.Print(LogLevel.Common, "state changed", "App");
Добавление toggle для новой системы
- В папке системы создать
Debug/Presets/DebugSettingsExtMySystem.cs - Добавить partial
DebugSettingsс toggle и свойством - В Core системы — partial
SettingsModelс соответствующим свойством
Известные расширения
| Система | Toggle | Свойство | Файл |
|---|---|---|---|
| DebugSystem | debugMode |
DebugMode |
DebugSystem/DebugSettings.cs |
| AppSystem | appStates |
AppStateDebugMode |
AppSystem/Debug/DebugSettingsExtApp.cs |
| InputBusSystem | inputLogs |
InputDebugMode |
InputBusSystem/Debug/Presets/DebugSettingsExtInput.cs |
| UIProviderSystem | uiLogs |
UiDebugMode |
UIProviderSystem/Debug/Presets/DebugSettingsExtUiProvider.cs |
| TweenerSystem | asyncTweenerLogs |
AsyncTweenerDebugMode |
UI/TweenerSystem/Debug/Presets/DebugSettingsExtAsyncTweener.cs |
Граничные случаи
| Ситуация | Поведение |
|---|---|
DebugMode = false |
Все локальные XxxDebugMode возвращают false |
| Ассет не создан | Settings.Data() не содержит debug-свойств — зависит от SettingsSystem |
| Новый пакет без toggle | Debug-логи этого пакета неуправляемы — нужно добавить partial |