Розробка системи зіткнень (Collision System) мобільної гри

Розробка системи зіткнень (Collision System) мобільної гри Ви запускаєте раннер на Android, і персонаж провалюється крізь платформу на 60-му рівні. FPS падає з 30 до 20 на Galaxy A10. Тунелювання та хибні спрацювання — симптоми неоптимізованої фізики. Стандартні колайдери Unity та Godot працюють

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка системи зіткнень (Collision System) мобільної гри
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1218
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Розробка системи зіткнень (Collision System) мобільної гри

Ви запускаєте раннер на Android, і персонаж провалюється крізь платформу на 60-му рівні. FPS падає з 30 до 20 на Galaxy A10. Тунелювання та хибні спрацювання — симптоми неоптимізованої фізики. Стандартні колайдери Unity та Godot працюють на десктопі, але на мобільних пристроях з непостійним FPS та троттлінгом процесора система зіткнень дає збої. За роки ми оптимізували collision detection для ігор різних жанрів — від раннерів до платформерів. Більше 40 проєктів з кастомною фізикою, і ми гарантуємо якість на всіх етапах. Економія на тестуванні та доопрацюваннях — до 40% бюджету. Зниження витрат на реалізацію кастомної фізики — до 50%.

Проблеми штатних колайдерів на мобільних пристроях

Тунелювання — об'єкт на високій швидкості проходить крізь інший між двома фізичними кроками. CollisionDetectionMode.Continuous в Unity вирішує це, але коштує приблизно вдвічі дорожче по CPU, ніж Discrete. На бюджетних Android-пристроях це відчутно — ми фіксували просідання до 15% FPS при масовому використанні Continuous.

Хибні спрацювання на стиках. PolygonCollider2D з кількома вершинами на стику двох тайлів часто генерує фантомний коліжн — персонаж спотикається на рівній поверхні. В Unity вирішується через Composite Collider 2D, який об'єднує колайдери сусідніх тайлів в одну полігональну форму. В Godot аналог — TileMap з автоматичним об'єднанням колізійних форм.

Дорогі MeshCollider. MeshCollider з Convex = false в Unity не бере участі в dynamic-to-dynamic колізіях — тільки static. Якщо потрібні довільні форми для динамічних об'єктів, апроксимуйте примітивами: кілька BoxCollider/CapsuleCollider замість одного MeshCollider. Це ручна робота, але скорочує навантаження на broadphase в рази.

Як налаштувати матрицю шарів колізій для мобільних ігор?

Перше, що налаштовуємо — Layer Collision Matrix. Типова помилка — залишити всі шари взаємодіючими. У грі з 5 типами об'єктів це 25 пар перевірок замість 6-8 реально потрібних. Для мобільного проєкту це безпосередньо впливає на broadphase. Менше активних пар — менше роботи на кожен фізичний крок.

Типів об'єктів Всі пари Оптимізовані пари Економія перевірок
5 25 8 68%
10 100 20 80%
15 225 35 84%

Оптимізація матриці шарів дає економію до 84% перевірок без втрати точності. Зниження навантаження на CPU до 84% — це реальний виграш на слабких пристроях.

Приклад налаштування Fixed Timestep Для пристроїв з 60 FPS рекомендується Fixed Timestep = 0.0167 с. Для 30 FPS — 0.0333 с. Але не змінюйте його бездумно: занадто низький — надмірне навантаження, занадто високий — тунелювання. Профілюйте на цільовому пристрої.

Коли використовувати Trigger, а коли Collision?

Сценарій Тип Приклад
Фізичне зіткнення з відштовхуванням Collision (OnCollisionEnter) Удар м'яча об стіну
Логічний перетин без фізики Trigger (OnTriggerEnter) Зона отримання предмета
Перевірка натискання кнопки Trigger UI Raycast

Колізія — фізичне зіткнення з імпульсом, тригер — логічний перетин без фізики. Часта помилка: використовувати Collision там, де потрібен лише Trigger, додаючи зайві Rigidbody та навантажуючи solver. На Godot 4 аналог: Area2D для тригерів, CharacterBody2D.move_and_collide() для фізичних взаємодій. move_and_slide() автоматично ковзає по похилих поверхнях — те, що в Unity потрібно реалізовувати вручну через нормаль поверхні.

Коли рушійна фізика надмірна: кастомний raycast

Для деяких жанрів рушійна фізика надмірна. Приклад: раннер, де потрібна лише колізія персонажа з землею та перешкодами. Замість Rigidbody + Collider — raycast-based система:

void CheckGround() { RaycastHit2D hit = Physics2D.Raycast( transform.position, Vector2.down, groundCheckDistance, groundLayer ); isGrounded = hit.collider != null; if (isGrounded) groundNormal = hit.normal; } void CheckObstacles() { RaycastHit2D hit = Physics2D.BoxCast( transform.position, colliderSize, 0f, Vector2.right, obstacleCheckDistance, obstacleLayer ); if (hit.collider != null) OnObstacleHit(hit); } 

Це легше, повністю детерміновано та дає прямий контроль. Немає випадкових джитер-ефектів від solver-ітерацій. На слабких пристроях така система в 2-3 рази швидша за стандартну Rigidbody-фізику.

Як ми оптимізуємо collision detection: покроковий план

  1. Профілювання на цільовому пристрої. Використовуємо Unity Profiler (Deep Profile), дивимось Physics.Processing та Physics2D.Processing. Виявляємо вузькі місця: занадто дрібний Fixed Timestep, interpolate на десятках об'єктів, динамічні CompositeCollider2D.
  2. Налаштування матриці шарів. Прибираємо зайві пари, визначаємо тільки необхідні взаємодії. Це знижує навантаження на broadphase до 80%.
  3. Вибір типу детектора. Для швидких об'єктів вмикаємо Continuous, для решти Discrete. Якщо потрібна повна детермінованість — реалізуємо raycast-based систему.
  4. Апроксимація колайдерів. Замінюємо MeshCollider на комбінацію примітивів. Оптимізуємо PolygonCollider2D через Composite Collider 2D або TileMap.
  5. Тестування на 10+ пристроях. Перевіряємо на флагманах та бюджетних Android-пристроях. Фіксуємо FPS і споживання CPU.

Що входить в роботу

  • Аналіз поточної фізики — профілювання на реальних пристроях, виявлення вузьких місць.
  • Проектування шарів колізій — налаштування матриці, оптимізація пар.
  • Реалізація кастомних детекторів — raycast, sweep, AABB при необхідності.
  • Тестування — на 10+ моделях пристроїв від флагманів до бюджетних.
  • Документація — детальний опис системи, рекомендації з налаштування.
  • Навчання команди — розбір роботи з компонентом.

Терміни: прості механіки — від 3 до 5 днів, складні (з багатошаровою геометрією та кастомним детектором) — від 1 до 3 тижнів. Вартість розраховується індивідуально — оцінимо ваш проєкт безкоштовно. Зв'яжіться з нами для консультації. Замовте оптимізацію collision detection — отримайте безкоштовну оцінку вашого проєкту.

Наші рішення проходять App Store Review Guidelines та Google Play Console без зауважень. 8+ років досвіду в мобільній gamedev, більше 40 виконаних проєктів з кастомною фізикою, гарантія якості та підтримка після здачі. Для поглибленого розуміння див. Collision detection.