63 lines
3.8 KiB
Markdown
63 lines
3.8 KiB
Markdown
# Клиент: визуальное направление
|
||
|
||
**Статус:** зафиксировано 2026-10-21. Это решение для клиента Unity;
|
||
серверные контракты и `Vanguard.Rules` не меняются.
|
||
|
||
## Решение
|
||
|
||
- Клиент делаем в **3D** (Unity 6, URP), а не как плоский 2D-интерфейс.
|
||
- Основные экраны — **отдельные сцены**, каждая со своим 3D-окружением,
|
||
камерой, светом и UI-слоем:
|
||
1. **Login** — вход/регистрация;
|
||
2. **Lobby** — лобби, профиль, выбор режима, очередь, магазин/история;
|
||
3. **Collection** — коллекция карт;
|
||
4. **DeckBuilder** — конструктор колоды;
|
||
5. **Battle** — боевой стол.
|
||
- **Boot** — служебная сцена: поднимает `VanguardApp`, DI-контейнер,
|
||
сервисы, сеть, аудио и локализацию. Пользователю не показывается.
|
||
- Очередь, онбординг и настройки — **оверлеи внутри Lobby**, отдельными
|
||
сценами не являются.
|
||
- В Unity «отдельные окна» означают **отдельные сцены-экраны** внутри
|
||
одного окна приложения, а не несколько OS-окон.
|
||
|
||
## Что остаётся общим
|
||
|
||
Между сценами живут и не пересоздаются:
|
||
|
||
- `VanguardApp` + VContainer;
|
||
- `ApiClient`, `AuthService`, `MetaService`, `TokenStore`, `PlayerState`;
|
||
- `GameConnection` и боевое состояние;
|
||
- аудио, локализация, Addressables, настройки;
|
||
- `SceneFlow` — единая точка переходов между сценами.
|
||
|
||
Сцены отвечают за 3D-презентацию и свой UI. Сервисы не должны зависеть от
|
||
конкретной сцены.
|
||
|
||
## План миграции с текущего gray-box
|
||
|
||
Сейчас работает один runtime-Canvas (`AppRootView`) со всеми экранами —
|
||
это функциональный каркас. Его сохраняем как основу логики и постепенно
|
||
разносим:
|
||
|
||
- `LoginView` → сцена **Login** (3D-фон/стол, форма поверх);
|
||
- `MetaView` → сцена **Lobby** (3D-холл, панель профиля и входы в разделы);
|
||
- `CollectionView` → сцена **Collection** (3D-витрина/альбом карт);
|
||
- `DecksView` + будущий декбилдер → сцена **DeckBuilder** (3D-стол,
|
||
стопка колоды, карты, фильтры);
|
||
- `QueueView` → оверлей в **Lobby**;
|
||
- `BattleView` → сцена **Battle** (3D-стол, зоны, карты, камера, UI рук и
|
||
таймера).
|
||
|
||
Сетевые и доменные классы (`GameConnection`, `ApiClient`, `MetaService`)
|
||
переносятся без изменения контрактов. Сцены подключаются через
|
||
`SceneFlow`; `Boot` остаётся загруженной/персистентной.
|
||
|
||
## Ограничения и следующие шаги
|
||
|
||
- Пока нет 3D-ассетов: карты в gray-box показываются по `printingId`.
|
||
Арт и 3D-модели будут подключаться по `cardId` через Addressables.
|
||
- Ближайший визуальный шаг — создать пустые сцены Login/Lobby/Collection/
|
||
DeckBuilder/Battle, добавить `SceneFlow` и перенести Login/Lobby.
|
||
- Боевые анимации, камера и 3D-карты — после стабилизации сетевого
|
||
протокола и базового UI.
|