Unity мультиплеер: Mirror, синхронізація, reconnect та headless-сервер

Мобільна гра на Unity часто гальмує при додаванні мультиплеєра. Мережева синхронізація на телефоні — окремий виклик: випадковий перехід у фон обриває з'єднання, а затримки в 200 мс вбивають геймплей. Ми вирішуємо це завдання за допомогою відкритого мережевого коду [Mirror Networking](https://github.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Unity мультиплеер: Mirror, синхронізація, reconnect та headless-сервер
Складний
~1-2 тижні

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Мобільна гра на Unity часто гальмує при додаванні мультиплеєра. Мережева синхронізація на телефоні — окремий виклик: випадковий перехід у фон обриває з'єднання, а затримки в 200 мс вбивають геймплей. Ми вирішуємо це завдання за допомогою відкритого мережевого коду Mirror Networking — фреймворку, який дає повний контроль над Unity мережею та інфраструктурою. На відміну від Photon, Mirror не прив'язаний до хмари: підключайте kcp2k, Telepathy або WebSockets, піднімайте сервер на власних потужностях. Для мобільних проєктів це означає latency 10–50 мс замість 100+, економію на хостингу до 70% та оптимізацію трафіку, що скорочує витрати на передачу даних до 50%. Mirror обходиться в 2-3 рази дешевше Photon при 1000+ одночасних гравців. Наш досвід — 10+ років розробки мобільних мультиплеєрних ігор на Unity, понад 40 успішних релізів. Гарантуємо стабільну синхронізацію навіть при 50+ одночасних гравцях.

Як Mirror вирішує проблему втрати з'єднання на мобільних пристроях?

Мобільні мережі нестабільні. При переході у фон iOS закриває сокет через 10 секунд, Android — по-різному. Mirror сам не відновлює з'єднання, тому ми реалізуємо кастомний reconnect:

public class MobileNetworkManager : NetworkManager { private bool wasPaused; void OnApplicationPause(bool pauseStatus) { if (pauseStatus) { wasPaused = true; } else if (wasPaused) { wasPaused = false; if (!NetworkClient.isConnected) { StartCoroutine(TryReconnect()); } } } IEnumerator TryReconnect() { int attempts = 0; while (attempts < 5 && !NetworkClient.isConnected) { NetworkClient.Reconnect(); yield return new WaitForSeconds(2f * attempts); attempts++; } } } 

Згідно з документацією Mirror Networking, метод NetworkClient.Reconnect() використовується для відновлення з'єднання.

Код вище — база. Додатково налаштовуємо push-сповіщення (APNs/FCM) для повернення гравця в активну сесію та використовуємо NetworkManager.singleton для глобального доступу. Важно: не створюйте кілька NetworkManager у сцені — Mirror видасть попередження, але поведінка стане непередбачуваною.

Синхронізація стану: SyncVar, SyncList та виклики

[SyncVar] автоматично передає зміни з сервера на всіх клієнтів. Використовуйте hook для оновлення UI:

public class PlayerHealth : NetworkBehaviour { [SyncVar(hook = nameof(OnHealthChanged))] public int health = 100; void OnHealthChanged(int oldVal, int newVal) { healthBar.fillAmount = newVal / 100f; } [Command] public void CmdTakeDamage(int amount) { // Виконується тільки на сервері health = Mathf.Max(0, health - amount); } } 

Для колекцій (інвентар, черга бафів) використовуйте SyncList<T> з callback OnChange. Трійка [Command] (клієнт→сервер), [ClientRpc] (сервер→всі клієнти), [TargetRpc] (сервер→один клієнт) — основа будь-якого мультиплеєра. Опануйте їх до початку інтеграції.

Чому вибір транспорту критичний для мобільного мультиплеєра?

Транспорт Протокол Мобільний
kcp2k UDP-based Рекомендується, низька latency (10-50 мс)
Telepathy TCP Надійний, вища затримка (100+ мс)
WebSockets (Mirror) TCP/WS Для WebGL, не оптимальний для native
Ignorance UDP (ENet) Хороша альтернатива kcp2k

Для мобільного нативного додатку обирайте kcp2k або Ignorance. kcp2k вбудований у Mirror з версії 50+, налаштування: NoDelay = true, Interval = 10ms, FastResend = 2. TCP (Telepathy) використовуйте для покрокових ігор, де надійність важливіша за затримку. На мобільних пристроях kcp2k забезпечує в 5-10 разів меншу затримку порівняно з TCP.

Порівняння моделей авторитетності:

Характеристика Авторитетна (Authoritative) P2P (Peer-to-Peer)
Контроль стану Сервер — єдине джерело правди Кожен клієнт має локальний стан
Anti-cheat Високий — всі рішення перевіряються сервером Низький — клієнти можуть маніпулювати даними
Витрати на сервер Потрібен постійний сервер (headless) Сервер не потрібен, але потрібен NAT traversal
Затримка Вища через round-trip Нижча, але залежить від пірів

Headless-сервер та інфраструктура

Mirror-сервер — це той самий Unity білд з прапорцем -batchmode -nographics. Для action-ігор — один headless-сервер на кімнату, для стратегій з малою кількістю гравців — кілька кімнат на інстанс. Оркестрацію довірте Unity Game Server Hosting (Multiplay) або Kubernetes з автоскейлінгом. Невеликі проєкти стартують на VPS (DigitalOcean/Hetzner) з systemd-скриптами. Для UDP-транспорту (kcp2k) переконайтеся, що load balancer підтримує UDP passthrough.

Процес роботи над інтеграцією

  1. Аналітика — аудит геймдизайну, вибір моделі (authoritative / P2P), прототип latency.
  2. Проєктування — архітектура мережі, схема синхронізації, сценарії reconnect та anti-cheat.
  3. Реалізація — налаштування NetworkManager, транспорт, SyncVar, команди, спавн об'єктів.
  4. Тестування — навантажувальні тести (50+ клієнтів), емуляція втрати пакетів, перехід у фон.
  5. Деплой — налаштування headless-сервера, CI/CD для оновлень, моніторинг.

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

  • Архітектура мережі (вибір моделі, транспорту, балансування).
  • Налаштування Mirror: NetworkManager, префаби, спавн, команди.
  • Реалізація reconnect та обробки фону.
  • Збірка та деплой headless-сервера з systemd/Docker.
  • Load-тестування під 50+ одночасних з'єднань.
  • Документація API та інструкція з розгортання.
  • Підтримка після релізу (1 місяць).

Типові помилки при інтеграції Mirror у мобільну гру

NetworkIdentity не знайдено. Префаб не зареєстрований у NetworkManager.spawnPrefabs. Спавн через NetworkServer.Spawn впаде в runtime.

Authority confusion. isServer, isClient, isLocalPlayer, hasAuthority — чотири різні булеві. Код в Update() без перевірки isLocalPlayer виконується на всіх клієнтах.

Disconnect на мобільному. При переході у фон iOS закриває сокет через ~10 секунд. Mirror не відновлює з'єднання автоматично — потрібна кастомна логіка.

Строки

Базова Mirror-інтеграція з синхронізацією позицій, health та командами: 1–2 тижні. Повноцінна система з headless-сервером, матчмейкінгом, reconnect та мобільною оптимізацією: 1–2 місяці. Вартість розраховується індивідуально. Зв'яжіться з нами для аналізу вашого проєкту — оцінимо безкоштовно. Отримайте консультацію з архітектури мережі та строків. Замовте інтеграцію Mirror для вашої гри — ми проведемо аудит і запропонуємо рішення за 1 день.