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

English

Unity networking solutions

Unity provides comprehensive solutions for developing multiplayer games across various genres and scales. Selecting the right netcode solution is crucial because different game types have specific networking demands. Consider several factors here, including the game genre, scale, level of competitiveness, and the desired control over the networking layer. Casual games often prioritize simplicity and cost-effectiveness, while competitive games require precise and robust network management to ensure fairness and responsiveness. Whether you are building a casual cooperative game or a competitive action title, Unity offers powerful netcode packages and complementary services to meet your needs.

Netcode for GameObjects For casual cooperative multiplayer games, Unity recommends using the Netcode for GameObjects (NGO) package. This high-level solution simplifies developing multiplayer games by abstracting networking logic, making it easier to manage the game state for all players. If you’re just getting started with multiplayer development, NGO serves as an excellent starting point. Netcode for GameObjects includes a few key features: —

NetworkObject: This represents any object in the game that should be synchronized over the network. It handles object spawning, despawning, and ownership.

NetworkBehaviour: This is a specialized MonoBehaviour that provides networking capabilities. It offers built-in callbacks for handling network events and allows you to write server-side and client-side code.

Remote procedure calls (RPCs): These send messages and invoke methods on remote instances of your GameObjects using Server and Client RPCs.

NetworkVariable: This is a class that allows you to sync states across the network.

NetworkManager: This is a central component that manages the network state of your game, handling tasks such as connection, disconnection, and scene management.

These components work at the application layer to help you implement multiplayer functionality. Netcode for GameObjects is designed to be simple yet powerful, providing the tools needed to create robust and scalable multiplayer games.

Netcode for Entities Built on top of Unity’s Data-Oriented Technology Stack (DOTS) and the Entity Component System (ECS), Netcode for Entities is designed for server-authoritative gameplay. It includes advanced features like client-side prediction, interpolation, and lag compensation. In this setup, a centralized server handles all game simulations, reducing cheating by controlling game outcomes. Clients send inputs to the server, which processes these inputs and sends back the updated game state, minimizing potential manipulation. Netcode for Entities includes client-side prediction to mitigate latency, creating a smoother, near zero-lag experience. Compared to Netcode for GameObjects, it offers better scalability and bandwidth optimization. If you’re an experienced multiplayer developer with a project that requires a high degree of performance and determinism, DOTS and ECS might be the right base for your game. To learn more about data-oriented design in Unity read our DOTS e-book and reference this DOTS resources list.

The Unity sample ECS Network Racing is built with Netcode for Entities.

Choosing the right Netcode solution depends on your project’s requirements and your team’s expertise. You can start by using the table below to help inform your decision. Feature

Netcode for GameObjects

Netcode for Entities

Target audience

Beginners and intermediate developers

Advanced developers

Architecture

Object-oriented (MonoBehaviour-based)

Data-oriented (Entity Component System ECS and DOTS)

Performance

Suitable for smaller scale games

Optimized for high performance and scalability

Scalability

Limited, ideal for a small number of players

High, designed for large-scale games

Networking features

NetworkVariables, RPCs, NetworkTransform, limited client-side prediction (anticipation), interpolation, supports UnityTransport

Full featured clientside prediction, interpolation, lag compensation, supports optimized UnityTransport

Unity Services Integration

Full support for Lobby, Relay, etc.

Full support for Lobby, Relay, etc.

Sample projects

Boss Room, Bite Size Samples

Megacity Metro, ECS Racing, Netcode Samples

Another great resource is Unity Multiplayer Center. The Multiplayer Center provides a starting point to create a multiplayer game. It recommends Unity multiplayer packages based on the needs of your game, and gives you access to samples and tutorials to help you use them. See the Multiplayer Center documentation for instructions on how to get and set up the package in your project.

Unity Transport The Unity Transport Package is a netcode-agnostic library that provides a low-level network layer focused on performance and reliability – a modern, secure, and portable transport library that extends the conventional UDP with advanced features: —

Reliability: Adds reliable communication over UDP, ensuring critical messages are delivered without the overhead of TCP

Security: Incorporates encryption and authentication to protect data from unauthorized access

Performance: Optimized for low latency and high throughput

Cross-platform compatibility: Designed to work seamlessly across different platforms and devices

Both Netcode for GameObjects and Netcode for Entities rely by default on Unity Transport. Developers looking to keep fine-grain control over the network can also use Unity Transport as a standalone library and build their own customized netcode on top for specific game needs. Unity Transport now adds WebGL support that can enhance the cross-platform and web multiplayer experience.

Third-party networking Though we recommend starting with Netcode for GameObjects, it’s important to understand it’s not your only option. The Unity community features many different solutions to fit your specific needs. Here are some third-party networking options available from the Unity Asset Store: —

Photon Unity Networking (PUN): Photon offers a comprehensive and scalable solution suitable for games demanding high concurrent user numbers.

Mirror: Known for its simplicity and ease of use, Mirror is a free open-source networking library originally based on Unity’s UNet.

DarkRift Networking 2: This solution provides both high performance and flexibility and is tailored for developers looking for detailed control over their networking.

Forge Networking Remastered: This is an open-source option that allows for advanced customization and control.