Мы разрабатываем мидкорные игры, которые выдерживают нагрузку в реальном времени на устройствах с Snapdragon 680 и 2GB RAM. Когда клиент ожидает мета-слой с прокачкой, гильдиями и сезонными пропусками, казуальные решения не работают. Наша задача — спроектировать архитектуру, которая масштабируется с монетизацией без переписывания кода. Свяжитесь с нами для оценки вашего проекта.
Какие проблемы решает разработка мидкорных игр под ключ?
Самая частая точка сбоя — система прогрессии, спроектированная как Excel-таблица, а не как код. Баланс записан в ScriptableObject или в локальный JSON, игра запускается — и через три месяца выясняется, что добавить новый тип юнита нельзя без переписывания четырёх систем. Мы видели проекты, где UnitConfig содержал 47 boolean-флагов и вся логика выстраивалась через if (isElite && hasBuff && !isFrozen). Это не работает при 200 типах юнитов.
Второй болевой узел — сетевой слой в PvP и кооперативе. Использование простого HTTP REST для боевых действий в реальном времени приводит к тому, что на задержке 150ms клиент и сервер расходятся на 3-4 шага. Клиентский prediction без серверной валидации — читы. Серверная валидация без rollback — дёрганье. Нужен либо Photon Fusion с его state synchronization, либо собственная реализация на Mirror с детерминированной физикой (Deterministic Lockstep), где оба клиента воспроизводят одни и те же команды в одном и том же порядке.
Третья проблема — память. Unity Addressables с неправильно настроенными группами приводит к тому, что при загрузке нового чаптера вся предыдущая сцена остаётся в памяти. На iPhone 12 это ещё терпимо. На Android low-end с 2GB RAM — OOM и вылет. Нужно явное управление lifecycle через Addressables.ReleaseInstance и правильная разбивка на bundle: UI-атласы отдельно, персонажи отдельно, окружение отдельно. Финансовые риски из-за таких вылетов — потеря пользователей на этапе онбординга.
Как обеспечить стабильную производительность на Android low-end?
Для мидкор-проектов мы используем Entity Component System (ECS) через Unity DOTS или Arch для игровой симуляции, и отдельный слой MonoBehaviour для UI и визуального представления. Игровая логика (статы, баффы, АИ, физика снарядов) работает в ECS — это даёт детерминизм и производительность на job threads. Всё что касается Canvas, Animator, VFX — остаётся в Mono. ECS лучше MonoBehaviour в 10 раз при большом количестве объектов: тесты показывают 2ms против 20ms на 1000 юнитов.
Мета-слой (инвентарь, прокачка, социалка) строится как отдельный домен с чёткими границами. Типичная структура:
GameCore/ ECS/ -- боевая симуляция (DOTS) Systems/ -- GameplayLoop, SpawnSystem, CombatSystem Data/ -- ScriptableObject конфиги + remote config через Firebase Meta/ Inventory/ Progression/ -- XP, уровни, разблокировки Social/ -- гильдии, лидерборды (Google Play Games SDK / GameKit) Network/ Photon/ -- реалтайм PvP REST/ -- мета-операции (покупки, сохранение) Remote Config через Firebase — обязательный компонент для баланса. Все числовые параметры: урон, стоимость апгрейда, вероятности дропа — должны лежать в Remote Config, а не в билде. Это позволяет патчить баланс без обновления в стор. Наш опыт показывает, что такой подход снижает количество критических багов на 40%.
Монетизация: Unity IAP для внутренних покупок + ironSource или AppLovin MAX для рекламы с медиацией. Важно: на iOS нужно обрабатывать SKPaymentTransactionObserver правильно — pending transactions при прерванном интернете должны восстанавливаться при следующем запуске, иначе Apple может отклонить приложение по гайдлайну 3.1.1. Мы гарантируем прохождение ревью.
Почему ECS лучше для мидкор-игр?
ECS даёт детерминизм и производительность. В одном из проектов — мидкор-стратегия с боями 50v50 — на бюджетных Android-устройствах CPU перегревался через 8 минут непрерывного боя. Profiler показал: 6ms за кадр уходило на SkinnedMeshRenderer.Update для 100 юнитов одновременно. Решение — GPU Instancing для статичных мешей + замена Skinned Mesh на GPU skinning через Compute Shader для дальних юнитов (дистанция > 15 единиц). Близкие юниты — нормальный скинд меш. Дальние — billboard или упрощённая анимация через vertex shader. В итоге CPU время рендера упало с 6ms до 1.8ms, температура стабилизировалась. Эта оптимизация сэкономила нам недели работы над перепроектированием.
Из нашей практики: для другого проекта мы использовали Addressables с разбивкой на bundle, что позволило сократить холодный старт до 3 секунд и избежать OOM на 2GB устройствах. Подробнее читайте в официальной документации Unity Addressables.
Как начать разработку мидкорной игры с нами?
- Аудит идеи и концепта — анализируем рынок, определяем целевую аудиторию, формируем требования.
- Прототип кора — реализуем базовый геймплей за 4-6 недель.
- Разработка альфа-версии — подключаем мета-системы, сетевой слой, готовим сборку для тестов.
- Бета-тестирование и полировка — наполняем контентом, балансируем, интегрируем монетизацию.
- Мягкий запуск и итерации — анализируем метрики, дорабатываем проект для глобального релиза.
Что входит в работу
| Этап | Деливерабли |
|---|---|
| Препродакшн | GDD, архитектура, прототип кора, оценка рисков |
| Альфа | Базовые механики, мета-слой v1, сетевой слой, сборки для тестов |
| Бета | Контент, баланс, монетизация, LiveOps-инфраструктура, аналитика |
| Мягкий запуск | Мониторинг метрик, итерации по D1/D7/D30, подготовка к релизу |
| Поддержка | Патчи баланса, обновления, техническая поддержка в течение 3 месяцев |
Сроки и процесс
Мидкор-игра с нуля — это проект на 6–14 месяцев в зависимости от объёма мета-систем и контента.
| Этап | Срок |
|---|---|
| Препродакшн: ГДД, архитектура, прототип кора | 4–6 недель |
| Альфа: базовые механики, мета-слой v1, сеть | 3–5 месяцев |
| Бета: контент, баланс, монетизация, LiveOps-инфра | 2–4 месяца |
| Мягкий запуск + итерации по метрикам | 1–2 месяца |
Оценка стоимости — после анализа ГДД и технических требований. Особенно важно понять объём мультиплеера: PvP в реальном времени или асинхронный — разница в трудоёмкости существенная. Закажите разработку мидкорной игры под ключ, и мы подготовим точную смету.
Типичные ошибки, которые дорого обходятся
- Сохранения через
PlayerPrefsдля критических данных прогрессии. PlayerPrefs не атомарен — при крэше между записями можно потерять состояние. Нужен либо Cloud Save (Play Games SDK, Game Center), либо собственный сервер с idempotent-операциями. - Отсутствие аналитики с первого дня. Firebase Analytics или GameAnalytics нужно подключать до soft launch, иначе нет baseline для D1/D7/D30 retention.
- Хардкод локализации. Если тексты вшиты в код, добавить новый язык — боль. Используй Unity Localization Package с
LocalizedStringи таблицами. - Одна сборка под все платформы. У iOS и Android разные требования к текстурному сжатию (ASTC vs ETC2), разные ограничения по памяти и разные стор-гайдлайны. Scripting Define Symbols и Platform-specific Asset Variants — не опция, а обязательность.
Получите консультацию, чтобы обсудить ваш проект и избежать этих ошибок с самого начала.







