Перейти к содержимому

Как сделать сетевую игру в unity

  • автор:

Элементы сетевого взаимодействия в Unity

Встроенные в Юнити способы работы с сетями поддерживают всё, описанное на предыдущей странице. Создание серверов и подключение клиентов, обмен данными между подключенными клиентами, определение какой игрок управляет какими объектами, доступ через различные конфигурации сети — всё это поддерживается сразу после установки Юнити. На этой странице мы рассмотрим реализацию в Юнити этих сетевых задач.

Создание сервера

Перед тем как вы сможете начать играть в сетевую игру, вам необходимо определить другие компьютеры, с которым вы будете обмениваться данными. Чтобы это сделать, необходимо создать сервер. Это может быть как машина, на которой запущена игра, так и отдельная выделенная машина, не принимающая участия в игре. Чтобы создать сервер, просто вызовите Network.InitializeServer() в скрипте. Если вы хотите подсоединться к уже существующему серверу как клиент, вызывайте Network.Connect().

В общем, вам может быть очень полезно ознакомиться со всем классом Network class.

Связь с использованием компонентов Network View

Network View (просмотр сети) это компонент, который отправляет данные через сеть. Компонент Network View даёт вашим объектам GameObject возможность отправлять данные, используя удаленный вызов процедур RPC или синхронизацию состояний State Synchronization. Способ, которым вы используете Network View будет определять, как будут работать сетевые взаимодействия вашей игры. Network View имеют несколько вариантов, но все они необычайно важны для ваших сетевых игр.

Для большей информации об использовании Network View изучите Network View Guide page и Component Reference page.

Удаленные вызовы процедур (Remote Procedure CAlls, RPC)

Удаленные вызовы процедур (Remote Procedure Calls, RPC) это функции, объявленные в скриптах, прикрепленных к GameObject, который содержит NetworkView. Network View должен указывать на скрипт, содержащий RPC функцию. После этого, RPC функция может быть вызвана из любого скрипта в этом GAmeObject.

Для большей информации об использовании RPC в Юнити, изучите RPC Details page.

Синхронизация состояний (State Synchronization)

Синхронизация состояний это постоянный обмен данными между всеми клиентами игры. Таким способом позиция игрока может быть синхронизирована со всем клиентами, так что будет казаться, что он управляется локально, когда данные в действительности доставляются через сеть. Для синхронизации состояний внутри объекта GameObject вам просто надо добавить компонент NetworkView на этот объет и объяснить ему, за чем наблюдать. Наблюдаемые данные после этого синхронизируются со всеми клиентами в игре.

Для большей информации об использовании синхронизации состояний в Юнити, изучите State Synchronization page.

Network.Instantiate()

Network.Instantiate() позволяет вам создавать экземпляры префабов на всех клиентах естественно и просто. По сути, это вызов функции Instantiate() , но он выполняет создание экземпляров на всех клиентах.

Внутренне Network.Instantiate это простой вызов RPC, который выполняется на всех клиентах (также локально). Он распределяет NetworkViewID и назначает его созданной копии префаба, что гарантирует его правильную синхронизацию среди всех клиентов.

Для большей информации изучите страницу Network Instantiate.

NetworkLevelLoad()

Работа с обменом данными, состоянием клиентов игроков и загрузкой уровней может быть слишком большой. На странице Network Level Load вы найдёте полезный пример для решения этой задачи.

Master Server

Master Server (Управляющий сервер) помогает вам подбирать игры. При запуске сервера, вы подключаетесь к master server, и он предоставляет вам список всех активных серверов.

Master Server это место встречи для серверов и клиентов, где афишируются серверы и совместимые клиенты подключаются к запущенным играм. Это снимает необходимость заботиться об IP адресах для всех сторон. Это даже может помочь пользователям хостить игры без необходимости возиться с их маршрутизаторами, что требовалось бы при обычных обстоятельствах. Это может помочь клиентам пройти через брандмауэр сервера и добраться до частных IP адресов, обычно недоступных из публичного интернета. Это делается с помощью facilitator, который способствует установлению соединения.

Для большей информации изучите Master Server page.

Минимизация сетевого трафика

Важно использовать минимальный объём сетевого трафика, достаточный для корректной работы игры. В вашем распоряжении различные способы передачи данных, различные методы, определяющие что или когда пересылать и прочие ухищрения.

Для получения советов по уменьшению сетевого трафика, изучите Minimizing Bandwith page.

Отладка сетевых игр

Юнити поставляется с несколькими вспомогательными инструментами, которые помогут вам отладить вашу сетевую игру.

  1. Network Manager (Менеджер сетей) может быть использован для документирования всего входящего и исходящего сетевого трафика.
  2. Используя окна инспектора и иерархии вы можете отслеживать создание объектов, проверять сетевые идентификаторы и т.д.
  3. Вы можете запустить Юнити дважды на одной машине и открыть разные проекты в каждой программе. Для Windows это может быть сделано простым запуском другого экземпляра Юнити и открытием проекта из мастера проектов. Для Mac OS X, несколько экземпляров Юнити могут быть открыты из терминала и аргумент -projectPath может быть определен как: /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyProjectFolder/” /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath “/Users/MyUser/MyOtherProjectFolder/”

Убедитесь, что проигрыватель работает в фоновом режиме во время отладки сети потому что, если, например, два экземпляра запущены одновременно, один из них не будет активным. Это разорвет цикл сетевого взаимодействия и может вызвать непредсказуемые последствия. Вы можете включить этот параметр в Edit->Project Settings->Player в редакторе или при помощи Application.runInBackground

Создание многопользовательской игры на Unity3D.

Чек-лист успешной адаптации или как пройти испытательный срок в компании?

10 ключевых ошибок во время собеседования

Подготовка к собеседованию в IT

Активный поиск первой работы в IT – советы и частые ошибки

IТ в период войны: как найти первую работу

Использование и оптимизация UI системы при создании игр в Unity.

Из данного видео Вы узнаете о таком понятии — “сетевая игра”, localhost, ping и сокеты. Демонстрация примера простого сетевого взаимодействия, обзора сетевых движков UNet и Photon. Объяснение процесса работы игры с условием выделенного сервера, проектирования сетевой игры. Создания чата и RPC.

Покупай подписку с доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин

Выбираем правильную библиотеку для мультиплеера

Разработчики Unity оценили самые популярные на сегодняшний день фреймворки сетевого кода для многопользовательских игр и поделились результатами.

Не существует идеального универсального решения для всех видов игр. Например, FPS, запущенная на выделенном игровом сервере с защитой от читов, такая как Apex Legends, будет иметь совершенно другие требования к сетевому коду, чем MOBA, работающая как P2P с детерминированным откатом для предотвращения читерства, например Heroes Strike.

Поскольку не существует единого решения, разработчикам необходимо оценить варианты и решить, какое решение — или комбинация решений — лучше всего соответствует требования игры.

Unity и сетевой код

Unity предлагает два разных решения: UNet для GameObjects, который в настоящее время находится в режиме поддержки, и DOTS-netcode для ECS и находится в предварительной версии.

В родмепе на 2021 компания подтвердила планы по разработке решения для сетки. И пока работают над этим решением, они предлагают разработчикам оценить различные альтернативы.

Выбираем лучшее

Оценивали по следующим критериям:

  • Стабильность/поддержка. Оценивалось по трём осям — вероятность ошибок или сбоев, время отклика для исправления проблем или помощи в отладке проблемы и вероятность критических изменений в API.
  • Простота использования. По отзывам пользователей о том, насколько легко начать работу и выполнять общие задачи. Сюда входят примеры использования, документация, руководства и простые API-интерфейсы для создания прототипов.
  • Производительность. Смотрели на сборки мусора/выделения памяти, минимальные накладные расходы на пинг, производительность вычислений и, в идеале, возможность многопоточности.
  • Масштабируемость. Как и в случае с производительностью, оценили способность решения поддерживать большее количество подключённых клиентов без значительного ущерба для производительности.
  • Функциональность. Сосредоточились на функциях среднего уровня, таких как репликация объектов и переменных, RPC, управление сценой и т. д. Также искали возможности более высокого уровня, такие как прогнозирование и компенсация задержек.
  • Стоимость. Учитывалась как стоимость библиотек/решений, так и возможные скрытые затраты.

Ниже краткая выжимка. Полный отчёт можно посмотреть тут.

Разработайте собственную сетевую систему с Netcode

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

The 2023 Unity Gaming Report is here. Get data to make informed decisions about your game. Get the report

Встречайте: Boss Room

Boss Room — это небольшой демонстрационный проект кооперативного шутера на основе Netcode for GameObjects и Unity Relay, который поможет вам разобраться в принципах и приемах разработки многопользовательской игры.

введение в NetCode

Snowy racecar scene

Знакомьтесь с Netcode for GameObjects

Netcode for GameObjects — это сетевая библиотека для игрового движка Unity. Мы продолжаем развивать нашу систему в открытом виде, стараясь предоставить вам надежную, гибкую и расширяемую основу сетевого кода для решения задач вашего следующего многопользовательского проекта.

Установите пакет в Unity Editor или изучите код на GitHub.

Level up your game with Unity Gaming Services

Build your small-scale cooperative game with Netcode for GameObjects and connect your players with Relay and Lobby.

Plus, access more Unity solutions available to build, manage, and grow your game – battle-tested by the biggest names in gaming.

UGS key art

Электрический ток проходит между двумя панелями

Откройте новые возможности для игры с Unity Gaming Services

Создайте небольшую кооперативную игру с Netcode for GameObjects и поддержкой Relay и Lobby для подключения игроков.

Не забывайте и о других решениях Unity для разработки, поддержки и развития вашей игры, которые проверены в крупнейших игровых проектах.

Учитесь и творите вместе с сообществом

Как говорится, один в поле не воин, поэтому мы рекомендуем вам присоединиться! Изучайте документацию, технические примеры и контент и начинайте работу.

Кроме того, наши разработчики готовы ответить на ваши вопросы на форуме Multiplayer, в Discord и на GitHub.

boss room trailer

Учитесь и творите вместе с сообществом

Learn and create within a community

Someone once said that it’s dangerous to go alone – so we thought you should take this! Dive into our documentation for technical references and content to get started with networking.

Plus, our team is active on the Multiplayer forum, Discord, and GitHub if you have any questions.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *