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

Мобільна гра на Unity часто гальмує при додаванні мультиплеєра: випадковий перехід у фон обриває з'єднання, а затримки вбивають геймплей. Ми розробляємо мережевий код на Mirror Networking з кастомним reconnect і headless-сервером, забезпечуючи стабільну синхронізацію навіть у нестабільних мобільних мережах. Наша команда реалізує проєкт під ключ — від аудиту до підтримки, з подальшим супроводом.

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

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

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

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

Мобільна гра на 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 день.

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713