Сетевые решения Unity
Сетевые решения Unity
Unity предлагает комплексные решения для многопользовательских игр разных жанров и масштабов. Важно правильно выбрать систему сетевого кода, поскольку требования к обмену данными зависят от типа игры. Учитывайте жанр и масштаб игры, уровень соревновательности и необходимую степень контроля над сетевым уровнем. Для казуальных проектов часто важнее простота и экономичность, а соревновательным играм требуется точное и надежное управление сетью, обеспечивающее равные условия и отзывчивость.
Создаете ли вы казуальную кооперативную игру или соревновательный экшен, Unity предлагает производительные пакеты сетевого кода и дополнительные сервисы для решения ваших задач.
Netcode for GameObjects Для казуальных кооперативных многопользовательских игр Unity рекомендует пакет Netcode for GameObjects (NGO). Это высокоуровневое решение скрывает детали сетевой логики и тем самым упрощает разработку и управление состоянием игры у всех участников.
Если вы только начинаете заниматься многопользовательской разработкой, NGO станет отличной отправной точкой. Netcode for GameObjects включает несколько основных возможностей: - NetworkObject: представляет любой игровой объект, который требуется синхронизировать по сети. Компонент управляет созданием и удалением объекта, а также владением им.
- NetworkBehaviour: специализированный MonoBehaviour с сетевыми возможностями. Он предоставляет встроенные обратные вызовы для сетевых событий и позволяет писать как серверный, так и клиентский код. - Удаленные вызовы процедур (RPC): отправляют сообщения и вызывают методы удаленных экземпляров GameObject с помощью Server RPC и Client RPC. - NetworkVariable: класс для синхронизации состояния по сети. - NetworkManager: центральный компонент, который управляет сетевым состоянием игры, включая подключение и отключение клиентов, а также управление сценами. Эти компоненты работают на прикладном уровне и помогают реализовать многопользовательские возможности. Netcode for GameObjects сочетает простоту с широкими возможностями и предоставляет инструменты для создания надежных, масштабируемых многопользовательских игр.
Netcode for Entities Netcode for Entities построен на основе Data-Oriented Technology Stack (DOTS) и Entity Component System (ECS) Unity и предназначен для игрового процесса под управлением авторитетного сервера. Он поддерживает прогнозирование на стороне клиента, интерполяцию, компенсацию задержки и другие расширенные возможности. В такой архитектуре централизованный сервер выполняет все игровые симуляции и контролирует результаты, ограничивая возможности для читерства. Клиенты отправляют серверу ввод, а он обрабатывает данные и возвращает обновленное состояние игры, сводя к минимуму возможность манипуляций. Netcode for Entities использует прогнозирование на стороне клиента для компенсации задержки, обеспечивая более плавный игровой процесс с почти незаметным лагом. По сравнению с Netcode for GameObjects это решение лучше масштабируется и эффективнее использует пропускную способность.
Если вы опытный разработчик многопользовательских игр и проект требует высокой производительности и детерминизма, DOTS и ECS могут стать подходящей основой. Подробнее об ориентированном на данные проектировании в Unity читайте в нашей электронной книге о DOTS и в подборке ресурсов DOTS.
Демонстрационный проект Unity ECS Network Racing создан с помощью Netcode for Entities.
Выбор решения Netcode зависит от требований проекта и опыта команды. Приведенная ниже таблица поможет принять первоначальное решение. Характеристика
Netcode for GameObjects
Netcode for Entities
Целевая аудитория
Начинающие и разработчики среднего уровня
Опытные разработчики
Архитектура
Объектно-ориентированная, на основе MonoBehaviour
Ориентированная на данные: ECS и DOTS
Производительность
Для игр небольшого масштаба
Оптимизировано для высокой производительности и масштабируемости
Масштабируемость
Ограниченная; для малого числа игроков
Высокая; для крупных игр
Сетевые возможности
NetworkVariables, RPC, NetworkTransform, ограниченное прогнозирование клиента, интерполяция, UnityTransport
Полное прогнозирование клиента, интерполяция, компенсация задержки, оптимизированный UnityTransport
Интеграция Unity Services
Полная поддержка Lobby, Relay и других сервисов
Полная поддержка Lobby, Relay и других сервисов
Примеры проектов
Boss Room, Bite Size Samples
Megacity Metro, ECS Racing, Netcode Samples
Еще один полезный ресурс - Unity Multiplayer Center, отправная точка для создания многопользовательской игры. Он рекомендует пакеты Unity с учетом потребностей проекта и предоставляет доступ к примерам и учебным материалам. Инструкции по установке и настройке пакета приведены в документации Multiplayer Center.
Unity Transport Unity Transport Package - независимая от конкретной реализации сетевого кода библиотека, предоставляющая низкоуровневый сетевой слой с упором на производительность и надежность. Эта современная, защищенная и переносимая транспортная библиотека расширяет возможности обычного UDP:
- Надежность: обеспечивает гарантированную связь поверх UDP, доставляя критически важные сообщения без накладных расходов TCP. - Безопасность: использует шифрование и аутентификацию для защиты данных от несанкционированного доступа.
- Производительность: оптимизирована для низкой задержки и высокой пропускной способности.
- Кроссплатформенность: рассчитана на бесперебойную работу на разных платформах и устройствах. По умолчанию и Netcode for GameObjects, и Netcode for Entities используют Unity Transport. Разработчики, которым нужен точный контроль над сетью, могут применять Unity Transport как самостоятельную библиотеку и создавать поверх нее собственный сетевой код для конкретных задач игры.
В Unity Transport появилась поддержка WebGL, расширяющая возможности кроссплатформенных многопользовательских веб-игр.
Сторонние сетевые решения Мы рекомендуем начинать с Netcode for GameObjects, однако это не единственный вариант. Сообщество Unity предлагает множество решений для самых разных задач. В Unity Asset Store доступны, в частности, следующие сторонние сетевые решения:
- Photon Unity Networking (PUN): комплексное масштабируемое решение для игр с большим числом одновременно подключенных пользователей. - Mirror: простая и удобная бесплатная сетевая библиотека с открытым исходным кодом, изначально созданная на основе Unity UNet. - DarkRift Networking 2: производительное и гибкое решение для разработчиков, которым требуется детальный контроль над сетевым взаимодействием. - Forge Networking Remastered: решение с открытым исходным кодом, предоставляющее расширенные возможности настройки и контроля.