Розробка мобільної 2D-гри
2D-ігри домінують у топах мобільних сторів не тому що простіше у розробці, а тому що правильна 2D-гра працює однаково добре на iPhone 15 Pro та Android за 100 доларів. Аудиторія ширша, CAC нижче, розмір APK/IPA — менший. Clash Royale, Brawl Stars, Subway Surfers, Cut the Rope — все це 2D.
Вибір движка під конкретну гру
Вибір залежить не від «що краще», а від жанру, команди та дедлайну.
| Жанр | Рекомендуваний движок | Причина |
|---|---|---|
| Гіперказуальна аркада | Unity | Готові шаблони, швидкий прототип |
| Платформер, метроїдванія | Godot 4 | Найкращий TileMap, швидка ітерація |
| Карточна / стратегія з UI | Unity + Canvas | Зріла UI Toolkit |
| Вбудована в Flutter-застосунок | Flame | Одна кодова база |
| Вимоги до C++ та розміру APK | Cocos2d-x | Мінімальний overhead |
Що робить 2D-гру якісною
Ощущення від управління (game feel). Це не про графіку. Camera shake при попаданні. Screen freeze на 3–5 кадрів. Particle burst при знищенні. Juice-ефекти, які гравець не називає, але чує. Unity — Cinemachine з impulse: CinemachineImpulseSource.GenerateImpulse(). Godot — Camera2D.offset через Tween.
Анімація. Spine або DragonBones для скелетної 2D-анімації — це не «красивіше», це 90% економія на спрайтах. Замість 30 кадрів бігу — скелет з 8 костями. Unity інтеграція через Spine Unity Runtime. Godot — AnimationPlayer + Skeleton2D.
Тайлові рівні. TileMap в Unity (2D Tilemap system) або Godot — для платформерів та ізометрії. Редактор тайлів прямо в движку: autotiling за правилами для автоматичної розстановки бордюрів, кутів. Експорт з Tiled (mapeditor.org) підтримують обидва движки.
Фізика та коллізії
Box2D — де-факто стандарт для 2D мобільних. Unity: Rigidbody2D + Collider2D. Physics2D.OverlapCircleAll для виявлення ворогів у радіусі. ContactFilter2D — фільтр за layer mask.
Фізика в мобільних іграх часто детермінована — це важливо для мультиплеєра та replay-систем. Fixed Timestep у Unity — Time.fixedDeltaTime = 1/60f. У Godot — physics_process(delta) вызивається з фіксованим кроком.
Layer matrix. У Unity Physics 2D Layer Collision Matrix — явно вимикаємо невикористовувані коллізії між шарами. Без цього кожний об'єкт перевіряє столкновение з усіма — CPU waste на гарячому шляху.
Монетизація 2D-мобільних ігор
Rewarded видео (GoogleMobileAds.RewardedAd) — найефективніша модель для гіперказуальних та казуальних ігор. Показуємо за продовження, за монети, за життя. Interstitial — між рівнями, не чаще раза в 2 хвилини.
IAP — расходники (монети, життя) та одноразові покупки (видалити рекламу, skin-паки). Receipt validation на сервері — App Store Server API (iOS) та Google Play Developer API — обов'язково для будь-яких реальних транзакцій.
Типові помилки
Відсутність Object Pool для пуль та частинок. Instantiate/Destroy в Update — головний враг 60 FPS на мідл-сегменті Android. Стандартне правило: якщо об'єкт створюється та знищується частіше раза в секунду — в пул.
Важкі спрайти в Resources без атласів. Texture2D без Read/Write Enabled = false займає у два рази більше пам'яті. Generate Mip Maps для 2D-спрайтів — включено за замовчуванням, вимкнути.
Update() на кожному GameObject замість централізованого менеджера — overhead на виклик тисяч методів. 500+ активних Update() на мідл-Android — помітне падіння FPS.
Терміни
Прототип з core gameplay loop: 2–4 тижні. Повна казуальна гра (20–30 рівнів, прогресія, монетизація): 3–6 місяців командою з 3–4 людей. Вартість розраховується після аналізу Game Design Document та вимог до платформ.







