Послуги з розробки мультиплеєра та мережевого коду

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 4 з 4 послугУсі 242 послуг
Розробка чатів та соціальних модулів ігор
Середня
від 1 тижня до 1 місяця
Часті питання

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

Які етапи розробки гри?

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    533

Мультиплеєр та мережева архітектура

Ви побудували гру для одного гравця, білд стабільний, і раптом приходить завдання — додати мультиплеєр. Саме тут більшість команд серйозно недооцінюють обсяг робіт. Мультиплеєр — це не «додати синхронізацію», це переосмислення ігрової логіки, вибір мережевої архітектури та побудова серверної інфраструктури з нуля.

Вибір архітектури: авторитетний сервер vs. Relay

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

Relay-архітектура (P2P з ретрансляцією)

У relay-схемі клієнти не з'єднуються безпосередньо. Замість цього вони обмінюються даними через проміжний сервер, який просто пересилає пакети. Сервер не виконує ніякої ігрової логіки — це чиста маршрутизація трафіку.

Коли це доречно:

  • Кооперативні ігри з низьким рівнем конкуренції (спільне проходження, стратегії в реальному часі з малою кількістю гравців)
  • Прототипи та ранні версії
  • Маленькі студії без серверної експертизи

Конкретні інструменти:

  • Photon Relay — найпопулярніший вибір для Unity. Швидкий старт, готові SDK, зрозуміла тарифікація на основі CCU.
  • Unity Gaming Services Relay — вбудований в екосистему UGS, працює разом із Lobby та Netcode for GameObjects.

Проблема: читерство. Якщо клієнт є джерелом істини, він може відправляти будь-які дані. Для конкурентних жанрів (шутери, файтинги, спортивні симулятори) relay-архітектура неприйнятна.

Авторитетний сервер

Вся ігрова логіка виконується на сервері. Клієнти відправляють тільки введення (нажаття кнопок, напрямок руху); сервер обчислює фізику, колізії, шкоду — і розсилає результати клієнтам.

Це стандарт для будь-якого конкурентного жанру. Читер може відправити поддільне введення, але сервер його перевіряє і або ігнорує його, або застосовує логіку валідації.

Стек для Unity:

  • Netcode for GameObjects (NGO) — офіційне рішення Unity для авторитетного мультиплеєру. Побудований поверх Unity Transport. Включає: NetworkVariable, NetworkObject, RPC-виклики з коробки. Відносно молодий, але активно розвивається.
  • Mirror — форк uNet, зрілий та добре задокументований. Величезна база прикладів, підтримка численних транспортів (KCP, Telepathy, WebSockets). Якщо ваша команда раніше працювала з uNet, Mirror простіший у освоєнні.
  • Nakama — open-source ігровий бекенд з авторитетною логікою на серверній стороні. Підтримує Lua/TypeScript/Go для серверних модулів. Ідеально підходить, коли вам потрібен не лише матчмейкинг, а й профілі гравців, інвентар та лідерборди.

Стек для Unreal:

  • Unreal має вбудовану мережеву систему на основі авторитетного сервера. Dedicated Server, репліка акторів, RPC — все це частина движка. Для більшості жанрів достатньо нативних інструментів.

Компенсація затримки (Lag Compensation)

Це найбільш технічно цікавий аспект мережевого коду в конкурентних іграх. Розберімо це детально, тому що саме тут більшість команд робить критичні помилки, які роблять шутери та файтинги «неправильними на відчуття».

Проблема

Гравець бачить ворога і натискає кнопку пострілу. Між моментом натиснення та моментом, коли сервер отримує пакет, проходить час — RTT/2 (половина круглої затримки). За цей час ворог міг змінити положення. Якщо сервер перевіряє влучання по поточному положенню ворога замість того, яке бачив той, що стріляє — гравець відчуває «кулі не влучають».

Клієнтське передбачення (Client-Side Prediction)

Клієнт не чекає на підтвердження від сервера. Він одразу застосовує свої дії локально — рух, анімації, звуки. Коли приходить відповідь сервера, клієнт порівнює свій стан із серверним. Якщо вони збігаються — все добре. Якщо ні, відбувається узгодження: клієнт повертається до серверного стану і «переграє» всі непідтверджені введення.

Це вимагає зберігання історії введення на клієнті та швидкого пересчету стану. У NGO це реалізується вручну через NetworkBehaviour з користувацькою логікою передбачення. Mirror пропонує NetworkTransformReliable з базовим вбудованим передбаченням.

Серверна перемотка (Server-Side Rewind)

Коли сервер отримує команду «постріл» від клієнта A, він бере мітку часу з пакета та «перематує» світовий стан — назад до того моменту, який бачив клієнт A. Перевіряє влучання в цьому «старому» положенні ворога. Якщо влучив — влучання враховується.

Реалізація вимагає:

  • Зберігання історії станів (положень усіх об'єктів) протягом останніх N мілісекунд (зазвичай 200-500 мс, виходячи з максимально допустимого пінгу)
  • Ефективної інтерполяції станів за міткою часу
  • Обмеження глибини перемотки, щоб не давати переваги гравцям з дуже високим пінгом

Без цього механізму в шутерах гравці з пінгом 100+ мс постійно «промахуються» по ворогам. З ним — гра відчувається справедливою для всіх.

Інтерполяція vs. екстраполяція на клієнті

Віддалені об'єкти (враги) клієнт не передбачає — він їх інтерполює між двома найновішими відомими станами. Це створює невелику відставання на екрані (зазвичай 1-3 мережевих тики), але рух виглядає плавним.

Екстраполяція (передбачення руху ворога) дає менше зорової затримки, але при зміні напрямку створює різкі «стрибки». Більшість шутерів використовують інтерполяцію.

Серверна інфраструктура

Матчмейкинг та лобі

  • Nakama — включає матчмейкинг з коробки, напишіть користувацькі правила підбору в TypeScript/Go.
  • PlayFab (Microsoft) — повнофункціональний ігровий бекенд. Матчмейкинг, інвентар, хмарні збереження, аналітика. Добре інтегрується з Azure.
  • Unity Gaming Services Lobby — простий, але достатній для більшості інді-проектів.

Виділені сервери

Авторитетний мультиплеєр вимагає виділених серверів. Варіанти розміщення:

Підхід Плюси Мінуси
Самостійний хостинг (VPS/bare metal) Повна контроль, дешевше при високому навантаженні Потрібна DevOps-експертиза, ручне масштабування
Multiplay (Unity) Автоматичне масштабування, інтеграція з UGS Дорого, vendor lock-in
Agones (Kubernetes) Open-source, гнучкість, автоматичне масштабування Високий поріг входу
AWS GameLift Зріла платформа, глобальне розміщення Складна настройка, дорого при малих обсягах

Транспортний протокол

  • UDP — стандарт для ігор у реальному часі. Низька затримка, можливі втрати пакетів. Більшість ігрових движків та бібліотек працюють поверх UDP з користувацькою логікою надійності.
  • WebSocket — необхідний, якщо цільова платформа WebGL. Працює через TCP, що дає трохи більшу затримку, але прийнятно для казуальних жанрів. Photon та Mirror підтримують WebSocket-транспорт.
  • KCP — UDP-протокол з елементами надійності. Використовується в Mirror та інших рішеннях як компромі між швидкістю та надійністю.

Соціальні функції

Мультиплеєр — це не лише технічна синхронізація. Гравцям потрібні інструменти для взаємодії.

Типові функції:

  • Друзі та запрошення — через API платформ (Steam Friends, Game Center, Google Play Games) або користувацький сервіс у Nakama/PlayFab
  • Голосовий чат — Vivox (стандарт для ПК/консолей, інтеграція через Unity Gaming Services), Agora (кросс-платформа включно з мобайлом)
  • Текстовий чат — важливо модерувати контент. Готові рішення: PlayFab Chat, користувацький WebSocket-канал з модерацією
  • Лідерборди — Nakama, PlayFab, GameSparks. Важливо розділяти глобальні та лідерборди на основі друзів
  • Система кланів — нестандартна функція, вимагає окремої розробки. Для більшості проектів достатньо групування в Nakama

Автентифікація

Ніколи не придумуйте власну систему авторизації. Використовуйте встановлені провайдери:

  • PlayFab — підтримує анонімний вхід, Steam, Google, Apple, користувацький ID
  • Nakama — аналогічно, плюс email/пароль з коробки
  • Firebase Auth — добре підходить для мобільних ігор, глибока інтеграція з Firebase Analytics та Remote Config

Для конкурентних ігор захист облікових записів критичний: двофакторна автентифікація, виявлення підозрілих входів, швидка блокування скомпрометованих облікових записів.

Що потрібно зафіксувати перед початком розробки

  1. Жанр та рівень конкуренції — визначає вибір між relay та авторитетним сервером
  2. Максимальна кількість гравців на сесію — 2-4 гравці та 64 гравці — принципово різні завдання
  3. Цільові платформи — WebGL вимагає WebSocket, консолі вимагають сертифікацію мережевого коду
  4. Очікуваний піковий CCU — впливає на вибір інфраструктури та план масштабування
  5. Вимоги до античиту — потрібна серверна авторитет, потрібна інтеграція EasyAntiCheat або BattlEye