Unity — стандарт де-факто для мобильной разработки: кроссплатформенность, URP для рендеринга, новый Input System, Addressables для контента и экспорт в AAB одним кликом. Путь от идеи до релиза проходит через прототипирование, профилирование GPU/CPU, настройку монетизации и CI/CD пайплайн.
Почему Unity для мобильных игр
Движок закрывает 70% задач мобильной разработки «из коробки». Остальные 30% решаются пакетами и настройками. Главные пиляры:
Одна кодовая база
C# компилируется под iOS (IL2CPP) и Android. Единая логика геймплея, UI, сетевого кода и аналитики.
Universal Render Pipeline
Лёгкий рендерер с Batcher, SRP Batcher и GPU Instancing. Даёт 60 FPS на бюджетных устройствах при правильной настройке.
Asset Store и пакеты
Готовые системы инвентаря, диалогов, пулинга, рекламы. Экономит месяцы разработки инфраструктуры.
Экосистема C# и NuGet
Доступ к тысячам библиотек: JSON-сериализация, сокеты, криптография, математика. Нет привязки к проприетарным языкам.
Этапы разработки: дорожная карта
Процесс делится на шесть последовательных фаз. Пропуск любой фазы увеличивает риск переработок на поздних стадиях в 3–5 раз.
Концепт и Game Design Document
Целевая аудитория,_core loop_, монетизация, метрики удержания (D1, D7, D30), технические ограничения (мин. ОЗУ, версия ОС). Документ — живой, обновляется еженедельно.
Прототип (Greyboxing)
Примитивные кубы и сферы. Проверка «fun factor», управления, камеры, физики. Никакого арта, только Input System и скрипты. Если не весело в серых коробках — не будет весело с ассетами.
Вертикальный срез
Один полностью играбельный уровень с финальными механиками, UI, звуком, частицами, сохранением прогресса и первой монетизацией. Точка принятия решения: продолжать или пивот.
Продакшн контента
Уровни, персонажи, скины, баланс экономики, локализация. Работа с Addressables для удалённой загрузки контента. Параллельно — интеграция SDK рекламы и покупок.
Оптимизация и полировка
Профилирование на реальных устройствах (low-end, mid, high). Исправление GC Spikes, Draw Calls, Overdraw, утечки памяти. Настройка Quality Settings под тиры устройств.
Релиз и LiveOps
Сборка App Bundle (AAB) и IPA. Заполнение листингов, модерация, настройка Remote Config для баланса без апдейтов. Пост-релиз: ивенты, A/B тесты, патчи.
Техническая база: настройка проекта под мобильные
Перед написанием первой строки кода настройте проект. Исправление фундамента позже стоит в 10 раз дороже.
URP (Universal Render Pipeline)
Установите пакет Universal RP через Package Manager. Создайте Pipeline Asset, назначьте в Graphics Settings. Включите SRP Batcher и Dynamic Batching. Отключите HDR и MSAA для низких тиров. Используйте Shader Graph для кастомных шейдеров — они автоматически совместимы с SRP Batcher.
Input System
Замените старый Input Manager на Input System Package. Создайте Input Actions Asset: схемы «Touch», «Gamepad», «Keyboard&Mouse». Используйте PlayerInput компонент или C# generated class для типобезопасного доступа. Поддерживает мультитач и жесты из коробки.
Addressables
Отметьте ассеты (префабы, текстуры, аудио, сцены) как Addressable. Группируйте по лейблам: levels, characters, ui. Настройте Remote Load Path на CDN (Firebase, AWS S3, Azure). Это позволяет обновлять контент без релиза в сторах и уменьшает размер начальной загрузки.
IL2CPP и Stripping
В Player Settings: Scripting Backend → IL2CPP, Api Compatibility Level → .NET Standard 2.1. Managed Stripping Level → High (или Medium для старта). Это удаляет неиспользуемый код, уменьшает бинарь и ускоряет запуск. Проверяйте link.xml для сохранения рефлексии (JSON сериализация, DI контейнеры).
Оптимизация: где теряются кадры
Мобильный GPU — тайловый рендерер (Tile-Based Deferred Rendering). Перерисовка пикселей (Overdraw) и смена состояний (Draw Calls) бьют по производительности сильнее, чем полигоны. Профилируйте на устройстве, а не в редакторе.
| Проблема | Инструмент диагностики | Решение |
|---|---|---|
| Высокие Draw Calls (> 100–150) | Frame Debugger, Profiler (Render) | GPU Instancing на материалах, Static Batching для окружения, Sprite Atlas для UI/2D, SRP Batcher (только URP шейдеры). |
| GC Alloc в Update / FixedUpdate | Profiler (GC Alloc column), Deep Profile | Object Pooling для пуль, врагов, эффектов. Structs вместо классов для данных. Кэшируйте GetComponent, списки, массивы. Избегайте LINQ и foreach по не-массивам в горячем коде. |
| Текстурная память > 300–500 MB | Profiler (Memory → Textures), Xcode Instruments / Android Studio Profiler | Сжатие ASTC 4×4 или 6×6 (iOS/Android). Mipmaps обязательны. Max Size 1024/2048 для UI, 512 для 3D. Удаляйте альфу, где она не нужна (RGB24 вместо RGBA32). |
| Overdraw (UI, частицы, прозрачность) | Scene View → Overdraw, RenderDoc | UI: минимизируйте вложенность Canvas, используйте RectMask2D, отключайте Raycast Target на невидимых элементах. Частицы: Cutout шейдеры, низкий Max Particles,_simulationSpace: World_. |
| CPU Bound: физика, поиск пути, логика | Profiler (CPU Usage), Burst Compiler + Jobs | Physics: Layer Collision Matrix, Fixed Timestep 0.02 (50 Hz) или 0.016 (60 Hz). NavMesh → NavMeshComponents (ASTAR Pathfinding Project). Тяжёлые расчёты → Burst + Job System + ECS (DOTS). |
Правило 30/60: Целевой FPS — 60. Минимально допустимый — 30. Если на низком тире (Snapdragon 450 / A10) игра держит 30 FPS с запасом 20% по CPU/GPU — оптимизация достаточна. Не гоньтесь за 60 FPS на флагманах ценой читаемости кода.
Монетизация и аналитика: встраиваем рано
Интеграция SDK на стадии вертикального среза выявляет конфликты с жизненным циклом приложения (OnApplicationPause, deep links) до массового тестирования.
Рекламная монетизация
Unity Ads / AdMob / AppLovin MAX. Ревард-ролики для ретаргетинга (продолжить после смерти, удвоить награду). Интерстишиалы на естественных переходах (между уровнями). Баннеры — только если не портят UX. Настройте mediation для максимизации eCPM.
Внутриигровые покупки (IAP)
Unity IAP (пакет UnityEngine.Purchasing). Определите каталог продуктов (Consumable, Non-Consumable, Subscription). Валидация чеков на сервере (PlayFab, кастомный бэкенд) — защита от взлома. Восстановление покупок (Restore Purchases) — обязательно для iOS.
Аналитика и Remote Config
Unity Analytics / GameAnalytics / Firebase. События: level_start, level_complete, ad_watched, iap_purchase. Remote Config — меняйте сложность, цены, частоту рекламы без апдейта билда.
Сборка и публикация: чек-лист релиза
Ручная сборка — источник ошибок. Настройте CI/CD (GitHub Actions, GitLab CI, Bitrise, Codemagic) для автоматической сборки тестовых билдов на каждый пуш в develop и релизных — по тегу.
Обязательные проверки перед загрузкой в консоль
- Keystore / Signing Certificate: Сохраните файл, пароли и alias в надёжном месте. Потеря = невозможность обновлять приложение в Google Play.
- Bundle Version Code (Android) / Build Number (iOS): Инкрементируйте каждый релиз. Автоматизируйте через скрипт сборки.
- App Icons & Adaptive Icons: Все размеры (48–512 px). Android Adaptive Icon: foreground + background layers. iOS: 1024×1024 без прозрачности.
- Splash Screen: Unity Splash (Custom Style) или нативный Launch Screen (iOS) / SplashScreen API (Android 12+). Без «Made with Unity» на бесплатном плане — только свои бренды.
- App Bundle (AAB) для Google Play: Не APK. AAB отдаёт пользователю только нужные нативные библиотеки и ресурсы под его архитектуру (arm64-v8a, armeabi-v7a) и плотность экрана.
- Privacy Policy URL: Обязателен для Google Play Console и App Store Connect. Укажите в настройках проекта и в листинге.
- Target API Level: Android: минимально API 34 (Android 14) на момент сабмита. iOS: минимально iOS 13–14, соблюдайте требования ATT (App Tracking Transparency).
- Store Assets: Скриншоты (Phone, Tablet, 7-inch), Feature Graphic (1024×500), Promo Video (landscape, до 30 сек), краткое и полное описание с ключевыми словами ASO.
Типичные ошибки и как их избежать
Паттерны, которые встречаются в 90% неудачных запусков. Каждая ошибка стоит недель отладки в продакшене.
Ошибка: Игнорирование профайлера до релиза
Запускают на флагмане, думают «работает». На популярных бюджетных моделях (Redmi 9, Galaxy A1x) игра выдаёт 15 FPS и вылетает по OOM.
Решение: Профилируйте еженедельно на 3 устройствах
Low-end (2–3 ГБ RAM, Mali-G52 / Adreno 610), Mid (4–6 ГБ, Mali-G76 / Adreno 640), High (8+ ГБ, Mali-G710 / A15+). Автоматизируйте сборку тестовых билдов на CI для этих устройств (Firebase Test Lab, Bitbar).
Ошибка: Standard Shader / HDRP материалы на мобиле
Standard Shader делает лишние пассы, не батчится SRP Batcher. HDRP вообще не для мобильных. Результат — 200+ Draw Calls на простой сцене.
Решение: Только URP Lit / Simple Lit / Particle шейдеры
Напишите свой URP Shader Graph для специфических эффектов (дисконнект,Outline, воду). Используйте SRP Batcher compatible флаг. Материалы с одинаковыми shader keywords батчатся в один Draw Call.
Ошибка: Логика в Update() каждого монобеhaviour
500 врагов с Update() = 500 вызовов в кадр. GC аллокации от векторов, кворнионов, строк. Кадровая просадка гарантирована.
Решение: Event-driven архитектура и DOTS/ECS
Централизованный GameLoopManager вызывает Tick у систем. Для больших симуляций — Entities Package (DOTS), Burst Compiler, Job System. Данные в NativeArray / NativeList, никакого GC.
Ошибка: Текстуры 4K без мИпмапов и сжатия
Размер билда 2 ГБ. Видеопамять переполняется на первом уровне. Вылеты на iOS (jetsam) и Android (lmk).
Решение: Addressables + ASTC + Max Size Presets
Настройте пресеты импорта: UI — 1024 ASTC 6×6, 3D — 512 ASTC 4×4, Background — 2048 ASTC 8×8. Mipmaps всегда On. Addressables грузят только нужное для текущей сцены.
Ошибка: Instantiate / Destroy в геймплее
Спавн пуль, врагов, партиклов через Instantiate вызывает аллокации, фрагментацию кучи, GC Spikes каждые несколько секунд.
Решение: Object Pooling (Unity Pool Package или свой)
Разогрейте пулы на загрузке сцены. pool.Get() / pool.Release(). Для партиклов — ParticleSystem.Simulate и рестарт, а не Instantiate.
Что дальше: развитие проекта после запуска
Релиз — не финиш, а старт LiveOps. Успешные мобильные проекты живут годами за счёт циклов: аналитика → гипотеза → A/B тест → внедрение → аналитика.
- Remote Config позволяет менять баланс сложности, награды за просмотр рекламы, цены в магазине без ревида приложения.
- Content Updates через Addressables: новые уровни, скины, ивенты каждые 2–4 недели удерживают D30/D90.
- Crashlytics / Sentry — мониторинг крашей в реальном времени. Исправляйте топ-5 крашей в первом патче (версия 1.0.1).
- User Acquisition (UA) — запуск рекламных кампаний (Unity UA, Meta Ads, Google Ads) на основе LTV, полученного за первые недели. Без понимания LTV покупка трафика — сжигание бюджета.
- Community & Support — Discord, встроенный чат поддержки, ответы на отзывы в сторах. Рейтинг 4.5+ критичен для органики.
Unity даёт все инструменты. Архитектура, дисциплина профилирования и итеративный подход превращают прототип в живой продукт. Начните с вертикального среза — остальное следует.
Надоели сериалы и однотипные игры? 🎬
Попробуйте текстовые ролевые игры с ИИ-персонажами — это как интерактивная книга, где главный герой вы сами. Никакого пассивного просмотра: вы говорите, действуете и влияете на сюжет. ИИ подыгрывает в роли персонажа и ведёт историю дальше — увлекает не хуже любимого сериала, только теперь главный — вы.
Попробовать новый формат 👉 https://clck.ru/3Ta8kQ

