Створення мобільних 2D-ігор: повний цикл розробки
Створення мобільної 2D-гри: ключові етапи
Ми спеціалізуємося на розробці мобільних 2D-ігор і знаємо, що ключовий виклик — забезпечити стабільні 60 FPS на пристроях з 2 ГБ ОЗП. За 10+ років на ринку ми реалізували 50+ успішних проєктів, тому розуміємо типові помилки: відсутність Object Pool, важкі спрайти без атласів, безліч Update() у сцені. Розберемо, як цього уникнути. Якісна 2D-гра працює однаково добре на флагманському iPhone та на бюджетному Android — аудиторія ширша, CAC нижчий, розмір APK/IPA менший. Clash Royale, Brawl Stars, Subway Surfers — все це 2D. Оцінимо ваш проєкт — зв'яжіться з нами. Оптимізація вартості розробки починається з правильного вибору двигуна та архітектури. Економія ресурсів на етапі прототипу може становити до 40% бюджету, а типовий бюджет казуальної 2D-гри стартує від $5,000.
Як вибрати двигун для 2D-гри?
Вибір залежить не від «що краще», а від жанру, команди та дедлайну.
| Жанр | Рекомендований двигун | Причина |
|---|---|---|
| Гіперказуальна аркада | Unity | Готові шаблони, швидкий прототип |
| Платформер, метроїдванія | Godot 4 | Найкращий TileMap, швидка ітерація |
| Карткова / стратегія з UI | Unity + Canvas | Зрілий UI Toolkit |
| Вбудована в Flutter-додаток | Flame | Єдина кодова база |
| Вимоги до C++ та малого APK | Cocos2d-x | Мінімальний overhead |
Godot 4 компілює 2D-сцени у 2 рази швидше за Unity для невеликих проєктів — це прискорює ітерації при прототипуванні.
Чому game feel критичний для утримання?
Game feel — це не про графіку. Camera shake при попаданні. Screen freeze на 3–5 кадрів. Particle burst при знищенні. Juice-ефекти, які користувач не називає, але відчуває. У Unity — Cinemachine для камери з impulse: CinemachineImpulseSource.GenerateImpulse(). У Godot — Camera2D.offset через Tween.
Анімація. Spine або DragonBones для скелетної 2D-анімації — це не «красивіше», це 90% економія на спрайтах (у ~10 разів менше пам'яті, ніж спрайтові листи). Замість 30 кадрів бігу — скелет з 8 кістками. У Unity інтеграція через Spine Unity Runtime. У Godot — AnimationPlayer + Skeleton2D.
Тайлові рівні. TileMap у Unity (2D Tilemap system) або Godot — для платформерів та ізометрії. Редактор тайлів прямо в двигуні: autotiling за правилами для автоматичної розстановки бордюрів, кутів. Експорт з https://www.mapeditor.org/ підтримують обидва двигуни.
Фізика та колізії
https://en.wikipedia.org/wiki/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 на гарячому шляху.
Приклад конфігурації Physics2D в Unity: встановіть Time.fixedDeltaTime = 1/60f, налаштуйте Layer Collision Matrix у Edit > Project Settings > Physics 2D, відключивши шари UI та Background. Для куль використовуйте ContactFilter2D з маскою лише ворогів.
Як оптимізувати FPS у 2D-грі?
- Object Pool — для куль, частинок і ворогів. Створіть пул з початковим запасом, активуйте/деактивуйте об'єкти замість
Instantiate/Destroy. Object Pool знижує overhead до 80%. - Атласи спрайтів — об'єднайте всі спрайти в один Sprite Atlas (Unity) або Texture Atlas (Godot). Відключіть Generate Mip Maps для 2D-спрайтів.
- Централізований менеджер — замість
Update()на кожному GameObject використовуйте єдинийGameManager.Update()з циклом по активним об'єктам. Це підвищує продуктивність на 50%. - Draw calls — використовуйте бэтчинг: суміщайте матеріали, зменшуйте кількість сортів.
Монетизація мобільних 2D-ігор
Rewarded відео (GoogleMobileAds.RewardedAd) — найефективніша модель для гіперказуальних і казуальних ігор. Показуємо за продовження, за монети, за життя. Interstitial — між рівнями, не частіше ніж раз на 2 хвилини.
| Тип монетизації | Дохід | Вплив на досвід |
|---|---|---|
| Rewarded video | Високий (eCPM $5–15) | Позитивний: користувач обирає |
| Interstitial | Середній (eCPM $2–8) | Негативний: дратує, якщо часто |
| IAP (витратники) | Залежить від конверсії | Нейтральний: добровільна покупка |
IAP — витратники (монети, життя) та одноразові покупки (прибрати рекламу, skin-паки). Receipt validation на сервері — App Store Server API (iOS) та Google Play Developer API — обов'язково для будь-яких реальних транзакцій. Згідно з App Store Review Guidelines Section 4.2, не можна вводити користувача в оману.
Типові помилки
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.
Що входить у розробку 2D-гри під ключ
- Game Design Document та прототипування
- Створення спрайтів, UI, анімацій (Spine/DragonBones)
- Програмування геймплею, фізики, ІІ на Unity/Godot
- Інтеграція реклами (AdMob, Unity Ads) та IAP (StoreKit 2, Billing 6)
- Налаштування аналітики (Firebase, AppsFlyer)
- Публікація в App Store та Google Play (code signing, provisioning, TestFlight)
- Технічна підтримка після релізу (1 місяць входить)
Терміни
Прототип з core gameplay loop: 2–4 тижні. Повна казуальна гра (20–30 рівнів, прогресія, монетизація): 3–6 місяців командою з 3–4 осіб. Вартість розраховується після аналізу Game Design Document та вимог до платформ. Отримайте консультацію — напишіть нам.
Ми працюємо з великим досвідом, реалізували 50+ проєктів. Гарантуємо якість та дотримання термінів.







