Реалізація тач-управління мобільної гри (тапи, свайпи, жести)

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація тач-управління мобільної гри (тапи, свайпи, жести)
Середній
від 1 дня до 3 днів
Часті запитання

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

Етапи розробки

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація дотикових керувань для мобільних ігор (дотики, свайпи, жести)

Unity обробляє дотики на мобільних пристроях через Input.GetTouch() або новий InputSystem—і між ними велика прірва. Старий API не розрізняє дотик від початку свайпу, поки палець не піднімається. Для ігор, де реакція на дотик повинна бути миттєвою, це неприйнятно.

Де ломаються більшість реалізацій

Найчастіша помилка: розпізнавання жестів на основі TouchPhase.Ended. Розробники порівнюють позиції в Began та Ended, обчислюють вектор—і отримують свайп. Працює на пристрої розробника при 60 FPS. На телефоні з 30 FPS та дросселюванням через перегрів (типово для бюджетних Android-пристроїв), дельта між кадрами зростає, і короткий дотик за таймером класифікується як свайп.

Правильний підхід: відстежувати рух у фазах Stationary та Moved, додати поріг відстані (sqrMagnitude > threshold) та поріг часу (Time.time - touchStartTime < tapMaxDuration). Unity це не надає з коробки—вам потрібен власний GestureRecognizer.

У проекті на Godot 4 з InputEventScreenTouch та InputEventScreenDrag ситуація трохи краща: рушій розділяє події на рівні API. Але мультитач—це окрема історія. index у InputEventScreenTouch дає порядковий номер пальця, і при швидкому зняттю одного пальця index-и можуть перепокладатися, ламаючи логіку двопальцевих жестів.

Побудова системи жестів

Для Unity напишіть TouchInputManager як singleton MonoBehaviour, який на кожному кадрі в Update() перебирає Input.touches і розкладає дотики на автомати стану—по одному FSM на кожен активний fingerId. Стани: Idle → Pressing → Tapping/Swiping/Holding. Переходи залежать від відстані та часу.

Вихід: події OnTap(Vector2 position), OnSwipe(Vector2 direction, float velocity), OnHold(Vector2 position, float duration), OnPinch(float delta). Ігрові системи підписуються на ці події через C# делегати або UnityEvent, не знаючи про Input.GetTouch.

Для Flutter-ігор на flame engine використовуйте TapDetector, PanDetector, ScaleDetector з пакету flame. Вони правильно працюють на вершині Flutter GestureArena—кожен детектор бере участь у арбітражі жесту, а переможець визначається за пріоритетом. Важливо: ScaleDetector та PanDetector конфліктують, якщо не встановити behavior: HitTestBehavior.opaque на батьківському віджеті.

Реальний кейс: Свайп-атаки в RPG

В одному проекті (top-down RPG, Unity 2022.3 LTS) потрібні були спрямовані свайп-атаки з восьма напрямків. Проста нормалізація вектора давала нестійкий результат—діагональні напрямки срабатували рідше, тому що користувачі рідко проводять строго під 45°. Рішення: зони допуску ±30° замість стандартних ±22.5°, плюс взвешення за швидкістю свайпу—швидкі свайпи менш точні, повільні—точніші. Після цього процент правильного розпізнавання зростав з 78% до 94% за даними Firebase Analytics (користувацька подія gesture_recognized).

Крім того, ми додали візуальний зворотний зв'язок через LineRenderer, який малює слід свайпу з затуванням. Без нього гравці не знають, прийняла гра їхній жест чи ні.

Мультитач та граничні випадки

Pinch-zoom реалізується через відстань між двома Touch об'єктами з різними fingerId. Головна подвідна камінь: коли третій палець торкається екрана під час pinch. Без обробки цього сценарію fingerId-и зміщуються і zoom стрибає. Рішення: зафіксуйте два fingerId при старті pinch і ігноруйте всі нові дотики до завершення жесту.

На Android крім того перевірте MotionEvent.ACTION_POINTER_DOWN та ACTION_POINTER_UP через нативний плагін, якщо вам потрібен доступ до тиску та площі контакту—Input.GetTouch у Unity не надає цих даних повністю.

Тривалість та обсяг робіт

Базова система (дотик, свайп, утримування) для однієї платформи: 2–4 дні. Повна система з мультитачем, pinch, кастомними жестами та інтеграцією з механіками гри: 1–2 тижні. Вартість розраховується індивідуально після аналізу вимог проекту.