Разработка мобильной карточной игры
Карточные игры — жанр с высокой зависимостью от баланса данных и надёжности состояния матча. Если в файтинге баг в анимации можно заметить не сразу, то в карточной игре неправильно рассчитанный эффект карты разрушает опыт немедленно.
Стек состояния матча
Каждый ход — транзакция. Игрок сыграл карту → цепочка эффектов → новое состояние доски. Если в середине цепочки произошёл крэш или разрыв соединения, состояние не должно остаться «наполовину применённым».
Реализация: паттерн Command для всех игровых действий. PlayCardCommand, AttackCommand, DrawCardCommand — каждая команда имеет Execute() и Undo(). Весь ход — это стек команд, который либо применяется полностью, либо откатывается. Это также даёт replay функциональность бесплатно: сохрани стек команд + начальный seed — получишь воспроизводимый матч.
Реалтайм vs асинхронный PvP
Синхронный PvP (оба игрока онлайн): Photon Realtime с кастомным Room State. Ходы передаются как events (RaiseEvent), сервер выступает relay. Для валидации — отдельный сервис на сервере, который проверяет легальность хода до трансляции оппоненту.
Асинхронный PvP (Push & Pull): ход сохраняется на сервер, оппоненту приходит FCM push-уведомление. Работает даже при плохом соединении, более толерантен к аудитории mobile-first. Для колоды и баланса — Firebase Firestore с security rules.
Визуальное представление карт
Карты в Unity — Canvas с RectTransform для UI-based рендера или отдельные SpriteRenderer меши для игровой доски. UI-подход удобнее для анимации и drag-and-drop через IBeginDragHandler, IDragHandler, IEndDragHandler. DOTween для эффектов разыгрывания карты: вылет из руки, свечение, shake при атаке.
Динамическая генерация арта карт из шаблона: RenderTexture + Camera в offscreen — рендерим 3D-модель карты с нужными параметрами в текстуру, используем как спрайт. Это позволяет иметь 500+ уникальных карт без 500 отдельных текстур.
Сроки: однопользовательская карточная игра с ИИ противником — 3–5 месяцев; с PvP и deck-building режимом — 5–9 месяцев.







