Інтеграція Photon для мультиплеєра мобільної гри

Мобільна гра на Unity з Photon втрачає з'єднання при зміні мережі, і гравці вилітають з кімнати? Ми налаштовуємо інтеграцію Photon PUN2 так, щоб реконект відбувався непомітно, а синхронізація об'єктів не перевантажувала трафік. Наша команда реалізує проєкт під ключ — від аудиту поточного коду до впровадження та подальшої підтримки, забезпечуючи стабільний мультиплеєр без зриву термінів.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Photon для мультиплеєра мобільної гри
Середній
~1-2 тижні
Часті запитання

Інтеграція Photon для мультиплеєра мобільної гри

Уявіть: ваша мобільна гра на Unity, ви інтегрували Photon, але при зміні Wi-Fi на 4G з'єднання рветься, і гравці вилітають з кімнати. Знайома проблема? Ми вирішуємо її на рівні коду: налаштовуємо playerTtl, реконект та ручну синхронізацію, щоб трафік не летів дарма. Багато розробників припускаються однієї й тієї ж помилки: покладаються на стандартні компоненти PhotonTransformView, що призводить до надлишкового трафіку та проблем з реконектом. Ми ж пропонуємо перевірений підхід, який скорочує трафік у 3–5 разів і забезпечує стабільне з'єднання на мобільних пристроях. За понад 10 років роботи з Photon ми виконали 40+ проєктів для мобільних ігор — від простих лобі до складних квестів з матчмейкінгом. Якщо ви хочете уникнути типових проблем і заощадити на трафіку, звертайтеся до нас для інтеграції Photon у вашу гру.

Як правильно синхронізувати об'єкти в Photon?

PhotonView — основний компонент синхронізації. Кожен мережевий об'єкт отримує ViewID. Синхронізацію позиції та ротації через PhotonTransformView використовують за замовчуванням — це працює, але розсилає оновлення на кожен FixedUpdate, навіть якщо об'єкт не рухався.

Правильний підхід: реалізувати IPunObservable.OnPhotonSerializeView з ручним контролем відправки даних:

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
    if (stream.IsWriting)
    {
        // Відправляємо тільки якщо змінилося значуще
        if (Vector3.Distance(_lastSentPosition, transform.position) > 0.01f)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
            _lastSentPosition = transform.position;
        }
    }
    else
    {
        _networkPosition = (Vector3)stream.ReceiveNext();
        _networkRotation = (Quaternion)stream.ReceiveNext();
    }
}

На клієнті прийняте _networkPosition не застосовується напряму — інтерполюємо через Vector3.MoveTowards або Lerp за часом пакета з PhotonMessageInfo.SentServerTime. Як стверджує документація Photon, такий підхід мінімізує мережевий трафік без втрати плавності.

Порівняння методів синхронізації:

Метод Трафік (пакетів/с) Затримка Простота
PhotonTransformView 20 пакетів (за замовчуванням) Низька Висока
IPunObservable (ручний) Від 1–2 пакетів (тільки при зміні) Середня Середня

Ручна синхронізація зменшує трафік у 3–5 разів. Для мобільних ігор це критично, оскільки Photon тарифікується за CCU. На практиці, у проєкті мобільної гонки з 6 гравцями, налаштування IPunObservable та зниження SerializationRate дозволило зменшити використання трафіку на 70%.

Як працює RPC і коли його використовувати?

photonView.RPC — для подій, які мають гарантовано дійти: урон, смерть, підбір предмета. RpcTarget.All розсилає всім у кімнаті, включаючи відправника. RpcTarget.Others — всім крім.

Типова помилка: використовувати RPC для позиційних оновлень. RPC надійний (TCP-like поведінка), але додає overhead на підтвердження. Для позицій — PhotonNetwork.SendRate + OnPhotonSerializeView, для важливих подій — RPC.

PhotonNetwork.SendRate за замовчуванням 20, SerializationRate — 10. Для мобільного баланс трафіку vs плавність: 15/10.

Підключення та кімнати

PhotonNetwork.ConnectUsingSettings(); // використовує PhotonServerSettings asset
void OnConnectedToMaster()
{
    PhotonNetwork.JoinRandomOrCreateRoom(
        expectedCustomRoomProperties: null,
        expectedMaxPlayers: 4,
        matchingType: MatchmakingMode.FillRoom,
        typedLobby: null,
        sqlLobbyFilter: null,
        createIfNotFound: true
    );
}

RoomOptions.CustomRoomPropertiesForLobby — масив ключів, видимих у лобі для фільтрації. Передавати все в lobby-властивості не потрібно: тільки те, за чим фільтрують (регіон, режим гри, карта).

Чому гравці відключаються при зміні мережі?

Зміна мережі. Photon SDK підтримує PhotonNetwork.ReconnectAndRejoin() — але тільки якщо кімната з playerTtl > 0. За замовчуванням playerTtl = 0, гравець вважається таким, що вийшов миттєво. Для мобільного: playerTtl = 10000 (10 секунд на reconnect).

iOS Background. При переході у фон iOS агресивно глушить мережеві з'єднання. Photon розірветься через 5-10 секунд. Для ігор, де це критично — UIBackgroundModes: voip (з обережністю, Apple може відхилити) або graceful disconnect.

Трафік. Photon Realtime тарифікується за CCU (одночасні користувачі). 20 CCU безкоштовно. При інтеграції варто додати Photon Dashboard у моніторинг — видно кількість повідомлень, байти, піки. Ми включаємо в роботу налаштування Photon Dashboard та оптимізацію коду для зниження трафіку на 30–50%.

Типові помилки при інтеграції Photon на мобільних пристроях
  1. Відсутність playerTtl — гравці миттєво покидають кімнату при тимчасовому розриві.
  2. Використання PhotonTransformView для всіх об'єктів — невиправдано високий трафік.
  3. Часті RPC-виклики для позицій — збільшують затримку та навантаження.
  4. Ігнорування налаштувань SendRate та SerializationRate — можна знизити без втрати якості.

Ці помилки легко виправити на етапі розробки. Замовте аудит вашого проекту, щоб виявити їх до релізу.

Що входить в нашу роботу з інтеграції Photon?

  • Аудит поточної реалізації (якщо є)
  • Налаштування Photon SDK та конфігурації (регіони, кімнати, TTL)
  • Реалізація синхронізації через IPunObservable (ручне управління трафіком)
  • Інтеграція матчмейкінгу з кастомними властивостями
  • Налаштування RPC та надійних подій
  • Оптимізація для мобільних пристроїв (реконект, трафік, background)
  • Тестування на 10+ реальних пристроях у різних мережах
  • Надання документації та підтримка після впровадження

Строки та вартість

Базова інтеграція Photon Realtime з кімнатами, синхронізацією позицій та RPC: від 3 до 7 днів. Повноцінна система з матчмейкінгом, custom properties та мобільною оптимізацією: від 2 до 3 тижнів. Вартість розраховується індивідуально — оцінимо ваш проект за 1 день.

Готові обговорити деталі? Зв'яжіться з нами, щоб отримати консультацію та точну оцінку. Звертайтеся до нас для надійної інтеграції Photon у вашу мобільну гру.

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714