VanguardReMaster/docs/client-visual-direction.md

3.8 KiB
Raw Blame History

Клиент: визуальное направление

Статус: зафиксировано 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.