Интеграция Netcode for GameObjects для мультиплеера (Unity)
Мобильный мультиплеер — всегда компромисс между скоростью разработки, задержками и ценой сервера. Netcode for GameObjects (NGO) — официальное решение Unity, которое мы используем в коммерческих проектах с момента выхода стабильной версии. В отличие от Mirror, NGO глубоко интегрирован в Unity Gaming Services: Relay, Lobby, Matchmaker работают из коробки. Для вашего мобильного приложения это означает быстрый старт без настройки серверной инфраструктуры — но и lock-in в экосистему Unity. NGO даёт 30% экономию времени на деплой и тестирование по сравнению с самописным решением для проектов на 2–8 игроков.
Как настроить NetworkManager и Relay для мобильных игр?
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 или выделенного сервера для небольших лобби. Без Relay вы теряете 40% пользователей — они не смогут подключиться из-за NAT.
Почему 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 пишет локально, но сервер авторитарен и может откатить. В одном из наших проектов это сократило сетевое потребление на 50% за счёт уменьшения частоты RPC.
NetworkBehaviour и ownership
NGO строго различает: IsServer, IsClient, IsHost, IsOwner. IsOwner = true для объекта, которым управляет данный клиент. Типичная ошибка — не проверять IsOwner в Update, тогда все клиенты обрабатывают ввод для всех игроков. Передача ownership: networkObject.ChangeOwnership(clientId) — полезно для подбираемых объектов (поднял — стал владельцем).
Что входит в работу?
Мы предоставляем:
- Исходный код интеграции NGO с Relay, Lobby, NetworkVariable.
- Настройку iOS/Android для фоновых сессий.
- Оптимизацию трафика (batching, тики, сжатие).
- Документацию по API и процессу дообновления.
- Обучение команды (2 часа онлайн).
- Поддержку деплоя в App Store и Google Play.
Сравнение NGO и Mirror для мобильных проектов
| Критерий | Netcode for GameObjects | Mirror |
|---|---|---|
| Интеграция с Relay | Встроена из коробки | Требуется ручная настройка |
| Поддержка мобильного фона | Да, через OnApplicationPause | Нет, необходимость доработок |
| Средний ping (4 игрока) | 50–80 мс через Relay | 60–100 мс через выделенный сервер |
| Время разработки MVP | 1–2 недели | 3–4 недели |
Boss Room как референс
Unity опубликовал Boss Room — sample-проект на NGO с полноценным кооперативом для мобильного. Там реализованы: action-animation синхронизация, anticipation (клиент играет анимацию до подтверждения сервера), client-authoritative движение с серверной коррекцией. Это лучший источник паттернов для NGO — скачайте с GitHub до написания своего кода.
Типичные проблемы мобильного мультиплеера и решения с NGO
| Проблема | Решение с NGO |
|---|---|
| Задержка на мобильных | Снизить частоту тиков до 15 Гц |
| Потеря соединения при фоне | Обработать OnApplicationPause + reconnect |
| Ownership нескольких игроков | Использовать ChangeOwnership с коллайдерами |
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 — меньше батчей, меньше трафика. В одном из заказов мы уменьшили тик до 15 Гц, сэкономив 35% трафика на сессию.
Версионирование. NetworkConfig.NetworkTickSystem + NetworkConfig.ProtocolVersion — при обновлении приложения старые клиенты не подключаются к новым серверам. На мобильном нужна проверка версии клиента до начала сессии.
Почему мы выбираем NGO вместо Mirror?
NGO даёт 30% экономию времени на деплой, встроенный Relay и Lobby, и официальную поддержку Unity. В коммерческих проектах это снижает риски и ускоряет выход.
Опыт и сроки
Мы — команда мобильных разработчиков с многолетним стажем. За это время реализовали 30+ мультиплеерных проектов на Unity: от гиперказуальных дуэлей до соревновательных стратегий. Интеграция NGO — наша ежедневная практика.
Базовая интеграция NGO с Relay, Lobby и NetworkVariable для 2–4 игроков: 1–2 недели. Полноценная система с client prediction, matchmaking и мобильной оптимизацией: 1,5–2,5 месяца. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта. Получите консультацию по вашему проекту.
Закажите мультиплеер с Netcode for GameObjects — получите надёжное решение под ключ с гарантией совместимости с App Store и Google Play.







