Интеграция Netcode for GameObjects для мультиплеера (Unity)

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция Netcode for GameObjects для мультиплеера (Unity)
Сложный
~1-2 недели
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • 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

Интеграция Netcode for GameObjects для мультиплеера (Unity)

Netcode for GameObjects (NGO) — официальное решение Unity для мультиплеера, пришедшее на смену UNET. В отличие от Mirror, NGO глубоко интегрирован в Unity Gaming Services: работает с Relay, Lobby, Matchmaker из коробки. Для мобильного проекта это означает быстрый старт без настройки серверной инфраструктуры — но и lock-in в экосистему Unity.

NetworkManager и Bootstrap

NGO требует NetworkManager с настроенным транспортом. Для мобильных рекомендован UnityTransport с RelayServerData — Unity Relay проксирует UDP-трафик через свои серверы, обходя NAT без выделенного сервера:

async Task StartHost()
{
    var allocation = await RelayService.Instance.CreateAllocationAsync(maxPlayers: 4);
    var joinCode = await RelayService.Instance.GetJoinCodeAsync(allocation.AllocationId);

    var relayServerData = new RelayServerData(allocation, "udp");
    NetworkManager.Singleton.GetComponent<UnityTransport>()
        .SetRelayServerData(relayServerData);

    NetworkManager.Singleton.StartHost();

    // joinCode передаём в Lobby для других игроков
}

joinCode — строка из 6 символов, которую клиенты используют для подключения через JoinAllocationAsync. Это заменяет необходимость в открытом IP для P2P или выделенного сервера для небольших лобби.

NetworkVariable и синхронизация состояния

NetworkVariable<T> — типизированная переменная с автоматической синхронизацией:

public class PlayerState : NetworkBehaviour
{
    private NetworkVariable<int> _health = new NetworkVariable<int>(
        100,
        NetworkVariableReadPermission.Everyone,
        NetworkVariableWritePermission.Server
    );

    public override void OnNetworkSpawn()
    {
        _health.OnValueChanged += OnHealthChanged;
    }

    private void OnHealthChanged(int previous, int current)
    {
        healthUI.SetValue(current);
    }

    [ServerRpc]
    public void TakeDamageServerRpc(int damage, ServerRpcParams rpcParams = default)
    {
        _health.Value = Mathf.Max(0, _health.Value - damage);
    }
}

NetworkVariableWritePermission.Server — только сервер пишет. NetworkVariableWritePermission.Owner — только владелец объекта. Клиент-сайд предсказание: Owner пишет локально, но сервер авторитарен и может откатить.

NetworkBehaviour и ownership

NGO строго различает: IsServer, IsClient, IsHost, IsOwner. IsOwner = true для объекта, которым управляет данный клиент. Типичная ошибка — не проверять IsOwner в Update, тогда все клиенты обрабатывают ввод для всех игроков.

Передача ownership: networkObject.ChangeOwnership(clientId) — полезно для подбираемых объектов (поднял — стал владельцем).

Boss Room как референс

Unity опубликовал Boss Room — sample-проект на NGO с полноценным кооперативом для мобильного. Там реализованы: action-animation синхронизация, anticipation (клиент играет анимацию до подтверждения сервера), client-authoritative движение с серверной коррекцией. Это лучший источник паттернов для NGO — читать до написания своего кода.

Lobby и Matchmaking

var options = new CreateLobbyOptions {
    IsPrivate = false,
    Data = new Dictionary<string, DataObject> {
        { "GameMode", new DataObject(DataObject.VisibilityOptions.Public, "deathmatch") },
        { "Map", new DataObject(DataObject.VisibilityOptions.Public, "forest") }
    }
};
var lobby = await LobbyService.Instance.CreateLobbyAsync("My Lobby", 4, options);

Lobby SDK хранит метаданные, фильтрация через QueryFilter. Heartbeat через LobbyService.Instance.SendHeartbeatPingAsync — без него лобби удаляется через 30 секунд.

Мобильные нюансы

Background. NetworkManager.Singleton.Shutdown() при OnApplicationPause(true) на iOS — иначе Relay-соединение зависает и не восстанавливается при возврате. При OnApplicationPause(false)StartClient() заново с сохранённым joinCode.

Batching. NGO по умолчанию батчит сообщения. NetworkConfig.NetworkTickSystem определяет частоту тиков (30-60 Hz). Для пошаговых игр тик можно снизить до 10 Hz — меньше батчей, меньше трафика.

Версионирование. NetworkConfig.NetworkTickSystem + NetworkConfig.ProtocolVersion — при обновлении приложения старые клиенты не подключаются к новым серверам. На мобильном нужна проверка версии клиента до начала сессии.

Сроки

Базовая интеграция NGO с Relay, Lobby и NetworkVariable для 2-4 игроков: 1-2 недели. Полноценная система с client prediction, matchmaking и мобильной оптимизацией: 1,5-2,5 месяца. Стоимость рассчитывается индивидуально.