Установка и развёртывание Vortex Framework
Пошаговая инструкция установки Vortex в Unity-проект и базовой настройки конфигов после установки.
Шаг 1. Установка
Vortex можно установить двумя способами — через Unity Asset Store или из локального .tgz-архива.
Вариант A. Через Unity Asset Store
- Открыть страницу Vortex Framework в Asset Store и нажать Add to My Assets.
- В Unity открыть Window → Package Manager.
- В выпадашке выбрать Packages: My Assets.
- Найти Vortex Framework, нажать Download, затем Import.
- Дождаться импорта и компиляции.
Вариант B. Из .tgz-архива
Подходит для приватных сборок и обновлений вне Asset Store.
- Открыть Window → Package Manager.
- Нажать + в верхнем левом углу → Add package from tarball...
- Выбрать файл
ru.tottenhurt.vortex-X.Y.Z.tgz. - Дождаться импорта и компиляции.
После установки пакет появится в списке как Vortex Framework (ru.vortex.framework).
Шаг 2. Проверка внешних зависимостей
Обязательные
| Зависимость | Источник | Назначение |
|---|---|---|
UniTask (com.cysharp.unitask) |
OpenUPM или git-URL | Async/await |
TextMeshPro (com.unity.textmeshpro) |
Package Manager → Unity Registry | Текстовый рендеринг |
| Sirenix Odin Inspector | Asset Store | Расширенный Inspector |
Опциональные
| Зависимость | Источник | Когда нужно |
|---|---|---|
Addressables (com.unity.addressables) |
Package Manager → Unity Registry | Для пакетов Database (Addressables-драйвер) и AssetCache. При установке Addressables Unity автоматически выставляет define ENABLE_ADDRESSABLES, и пакеты Vortex, требующие этого define, начинают компилироваться |
Если Addressables не установлен — соответствующие пакеты Vortex (AssetCacheSystem, Database-драйверы на Addressables) автоматически выключаются через defineConstraints в asmdef. Можно работать с Resources-драйвером Database или вообще без Database.
Если в Console красные ошибки про Sirenix.OdinInspector или Cysharp.Threading.Tasks — соответствующая обязательная зависимость не установлена.
Шаг 3. Авто-создание Core-ассетов
После первой компиляции Vortex автоматически создаст все системные ассеты в одной папке:
Assets/Resources/Settings/— все конфиги Vortex:ICoreAsset-наследники (создаётCoreAssetsController):SdkSettings,DriverConfig,AudioChannelsConfig,AssetCacheSettingsи т. д.SettingsPreset-наследники (создаётSettingsDriver):StartSettings,DatabaseSettingsи т. д.
Если ассеты не появились — открой меню Tools → Vortex → Debug → Check Core Assets для ручного запуска.
Авто-создание можно выключить через Edit → Preferences → Vortex/Editor (рекомендуется отключать только если ассетов слишком много и Editor зависает на старте).
Шаг 4. Настройка SdkSettings
Файл: Assets/Resources/Settings/SdkSettings.asset
Назначение: управляет включёнными SDK-пакетами Vortex через scripting define symbols (USING_NANINOVELL, USING_SPINE, и т. п.). Каждое поле — bool-toggle, связанный с конкретным define.
Что делать:
- Открыть ассет.
- Включить toggle'ы тех SDK-пакетов, которые нужны проекту:
- Naninovel
- MapLevels
- Quests
- RoofTransparency
- SaveLoad
- Spine
- Нажать Apply Changes — defines синхронизируются с PlayerSettings.
- После смены платформы (iOS/Android/PC) defines актуализируются автоматически.
Кнопки:
- Apply Changes — записать состояние тоглов в PlayerSettings → Scripting Define Symbols.
- Reload States — синхронизировать тоглы с текущим состоянием Scripting Define Symbols.
Шаг 5. Настройка DriverConfig
Файл: Assets/Resources/Settings/DriverConfig.asset
Назначение: связка «системный контроллер ↔ драйвер». Vortex использует Driver-pattern (canonical для всех систем: AudioSystem, VideoSystem, LocalizationSystem и т. п.) — конфиг хранит whitelist пар.
Что делать:
- Открыть ассет.
- Нажать Reload — Vortex просканирует все
ISystemController-наследники и заполнит таблицу. - Для каждой системы выбрать конкретный драйвер из выпадашки
Driver Type. - Нажать Save Config — сгенерируется автогенерированный файл
Assets/DriversGenericList.csс whitelist'ом.
Поле Искать драйверы только в ru.vortex* пакетах:
true(по умолчанию) — поиск ограничен Vortex-сборками. Если в проекте есть собственные драйверы, поставитьfalse.
Важно: без сгенерированного DriversGenericList.cs системы не подцепят свои драйверы — рантайм будет молча работать без аудио/видео/локализации. Save Config обязателен.
Шаг 6. Настройка AudioChannelsConfig
Файл: Assets/Resources/Settings/AudioChannelsConfig.asset
Назначение: список аудио-каналов проекта. Каждый канал — отдельная шина громкости/mute, экспонируется в UI слайдерами громкости.
Что делать:
- Открыть ассет.
- Заполнить массив
channelsименами каналов. Типовой набор:Music Sfx Ambient Voice UI - Имена становятся идентификаторами для атрибута
[AudioChannelName]в коде, привязокAudioChannelVolumeSliderв UI, и для драйвераAudioDriver.
При изменении массива AudioDriver.ResetChannels() вызывается автоматически — runtime-каналы пересоздаются.
Шаг 7. Настройка StartSettings
Файл: Assets/Resources/Settings/StartSettings.asset
Назначение: стартовая сцена при запуске из любого места в редакторе. Только для удобства разработки, в build не влияет.
Что делать:
- Открыть ассет.
- В поле
Start Sceneвыбрать из выпадашки нужную сцену (показываются все сцены в Build Settings). - Запуск Play-mode из любой сцены автоматически переключится на стартовую.
Шаг 8. Добавление префаба System на стартовую сцену
Префаб: Packages/Vortex Framework/_Prefabs/System.prefab
Назначение: готовая базовая инфраструктура Vortex для рантайма. Префаб содержит:
System
├── Audio
│ ├── SoundsPool
│ │ └── AudioSource ← шаблон для пула SFX-источников
│ ├── Music ← AudioSource для основного музыкального канала
│ └── CoverMusic ← AudioSource для перехватывающей музыки (cutscene, заставка)
└── AppState ← MonoBehaviour-обработчик жизненного цикла приложения
Что делать:
- Открыть стартовую сцену проекта (ту, что указана в
StartSettings). - Найти префаб System в Project window (
Packages/Vortex Framework/_Prefabs/System.prefab). - Перетащить префаб на корень иерархии сцены.
- Не разрывать связь с префабом — обновления Vortex дойдут до проекта только через сам префаб.
Что префаб даёт:
- AppState — слой управления жизненным циклом приложения: переходы между состояниями (
Starting/Running/Loading/Paused/Stopping), реакция на focus/pause, событие выхода. Без негоApp.OnExitи подобные шины не сработают. - Audio/SoundsPool — пул объектов
AudioSourceдля проигрывания SFX.AudioDriverинстанцирует копии шаблонногоAudioSourceпод нужное количество одновременных звуков. - Audio/Music — выделенный
AudioSourceдля фоновой музыки каналаMusic. - Audio/CoverMusic — выделенный
AudioSourceдля перехватывающей музыки (например, музыка кат-сцены поверх обычной).
Все три аудио-объекта подцепляются к каналам, объявленным в AudioChannelsConfig (шаг 6).
Важно: на сцене должен быть только один экземпляр System-префаба. При наличии нескольких —
AppStateHandlerиAudioDriverмогут работать с непредсказуемым поведением.
Шаг 9. Настройка пакетов SDK
После включения SDK-пакета в SdkSettings (шаг 4) и перекомпиляции — настроить связанные с пакетом ассеты.
Пункты 9.1 и 9.2 актуальны только при установленном Addressables-пакете. Без него соответствующие ассеты не создаются автоматически (asmdef отключены через
defineConstraints: ["ENABLE_ADDRESSABLES"]).
9.1. Database — Addressables (опционально)
Файл: Assets/Resources/Settings/DatabaseSettings.asset
Требования:
- Установлен пакет
com.unity.addressables. - Define
ENABLE_ADDRESSABLESактивен (выставляется автоматически при первой настройке Addressables-группы). - В проекте создана хотя бы одна Addressable Group через Window → Asset Management → Addressables → Groups.
Что делать:
- Перейти в Addressables Groups, назначить нужным ассетам labels (например,
database,characters,items). - Открыть
DatabaseSettings.asset. - В поле
Database Labelsвыбрать из выпадашки те labels, по которымDatabaseDriver(Addressables) загрузит свои Records при старте.
Dropdown показывает только labels, реально присвоенные хотя бы одному ассету.
Если labels не указаны — Database останется пустой, все Database.GetRecord<T>(id) вернут null.
Альтернатива без Addressables — Resources-драйвер Database (ассеты лежат в Resources/, грузятся по имени папки). См. README пакета Vortex.Unity.DatabaseSystem.
9.2. AssetCache — кэш Addressables (опционально)
Файл: Assets/Resources/Settings/AssetCacheSettings.asset
Требования:
- Установлен пакет
com.unity.addressables. - Define
ENABLE_ADDRESSABLESактивен.
Без Addressables пакет AssetCacheSystem не компилируется (asmdef содержит defineConstraints: ["ENABLE_ADDRESSABLES"]) — ассет не создаётся, использовать его невозможно.
Что делать:
- Открыть
AssetCacheSettings.asset. - Настроить:
- Survivor Capacity (default
32) — размер LRU-буфера освобождённых, но не выгруженных ассетов. Чем больше — тем больше памяти, но меньше повторных загрузок при возврате на предыдущие экраны/сцены.
- Survivor Capacity (default
Типовые значения:
- мобильный проект с ограничением памяти —
16-32; - desktop / богатые ассеты —
64-128; - стресс-сценарии (много возвратов на одни и те же эффекты/UI) — увеличивать выше.
Шаг 10. UI-примитивы (опционально)
Папка: Packages/Vortex Framework/_Prefabs/UIPrimitives/
Назначение: сбалансированный образец базовых UI-блоков для быстрого старта. Все примитивы построены на штатных компонентах Vortex (AdvancedButton, UIComponent, TweenerHub, UserInterface) и могут использоваться как точка отсчёта при сборке UI проекта.
Состав:
| Префаб | Назначение |
|---|---|
UI Primitive.prefab |
Корневой шаблон UserInterface для UIProvider — готовый контейнер экрана с анимацией показа/скрытия |
Button.prefab |
Базовая кнопка (AdvancedButton + TweenerHub) с настроенным feedback'ом по нажатию |
ButtonWithText.prefab |
Кнопка с встроенным TextMeshProUGUI |
Text Black 32.prefab / Text White 32.prefab |
TMP-тексты стандартного размера в двух цветовых вариантах |
К префабам приложены TweenPreset-ассеты (ButtonTween.asset, UserInterfaceTween.asset) — их используют сами префабы, отдельной настройки не требуют.
Способы использования (любой допустим, выбирается по нуждам проекта):
- Drag & drop напрямую — перетащить префаб из пакета в сцену. Связь с пакетом сохраняется, обновления Vortex доезжают автоматически. Подходит для прототипов и небольших проектов.
- Prefab Variant —
Right-click → Create → Prefab Variant. Override-правки локальны для варианта, базовый префаб продолжает обновляться вместе с Vortex. - Копирование в проект (рекомендуется для долгоживущих проектов) — скопировать префаб из
Packages/Vortex Framework/_Prefabs/UIPrimitives/вAssets/..., после чего связь с пакетом разорвана. Это даёт устойчивость к обновлениям Vortex и полную свободу правок, но снимает с примитивов автообновления.
Примечание: UI-примитивы — образец, а не обязательный канон. Никакая система Vortex от них не зависит. Можно использовать их, заменить своими аналогами или собирать UI с нуля.
Проверка корректности установки
После всех шагов запусти Play и проверь в Console отсутствие ошибок инициализации. В Debug-режиме (включается через Tools → Vortex → Debug → ... или флаг DebugMode в SettingsModel) каждая система пишет лог об успешной инициализации:
[Database] Initialized. Loaded N records.
[Settings] Initialized. SettingsModel populated.
[AssetCache] Initialized. SurvivorCapacity=32.
...
Если какая-то система молчит или пишет error — проверь:
- Соответствующий toggle в SdkSettings.
- Назначен ли драйвер в DriverConfig и нажат ли Save Config.
- Существует ли соответствующий
*Settings-ассет вResources/Settings/.
Типичные проблемы
| Симптом | Что проверить |
|---|---|
| Красные ошибки про Sirenix/UniTask/Addressables | Шаг 2 — внешние зависимости |
DriversGenericList not found в рантайме |
Шаг 5 — нажат ли Save Config |
Не найдены *Settings-ассеты в Resources/Settings/ |
Tools → Vortex → Debug → Check Core Assets + проверить Preferences |
AssetCache падает с Settings.Data().AssetCache is null |
Шаг 9.2 — ассет существует, define ENABLE_ADDRESSABLES есть |
| Database пуста | Шаг 9.1 — labels назначены, Addressables Groups настроены |
Звук не играет / App.OnExit не срабатывает |
Шаг 8 — префаб System на стартовой сцене |
| Пакет AssetCacheSystem не компилируется | Define ENABLE_ADDRESSABLES (включается при первой настройке Addressables) |