Unity 6.3
0 онлайн 55 гостей 3 в системе
Вход
Введение в сетевое взаимодействие многопользовательских игр Глава 4 из 11 Оригинал, стр. 22

Сетевые решения 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: решение с открытым исходным кодом, предоставляющее расширенные возможности настройки и контроля.