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

ESTEBAN MALDONADO / UNITY TECHNOLOGIESSenior Developer Advocate, Multiplayer Solutions
Oct 26, 2022|13 Мин
Создание моей первой многопользовательской игры с Netcode for GameObjects
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

Меня зовут Эстебан Мальдонадо, и я являюсь адвокатом разработчиков в Unity. Моя работа заключается в том, чтобы распространять информацию о Unity Gaming Services и создавать новый учебный материал, чтобы разработчики могли начать использовать инструменты для своего собственного пути разработки многопользовательских игр.

Одним из этих решений является Netcode for GameObjects (NGO), библиотека сетевого кода среднего уровня, созданная для игрового движка Unity. Решение по сетевому коду является необходимым в любом проекте разработки многопользовательских игр.

Одной из обязанностей адвоката разработчиков в Unity является создание образцовых игр, которые демонстрируют наши инструменты, и мне была назначена образцовая игра NGO – Galactic Kittens.

Тем не менее, хотя у меня было достаточно профессиональных проектов в игровой индустрии, у меня лично мало опыта в создании многопользовательских игр – поэтому это должно было стать не только возможностью для обучения разработчиков, использующих образец, но и опытом для меня в создании самой игры.

Вместе с моей командой мы разработали концепцию Galactic Kittens – уровень сложности образца, основные механики, способности персонажей (которые позже были удалены) и многое другое.

Чтобы справиться с проектом этой образцовой игры, я объединил усилия с талантливой командой из Bromio, чтобы сделать эту образцовую игру реальностью с отшлифованными художественными активами, музыкой и звуковыми эффектами, а также поддержкой программирования. Наша общая цель заключалась в том, чтобы предоставить разработчикам простое, дружелюбное введение в создание многопользовательской игры в Unity с помощью Netcode for GameObjects.

В этом блоге я расскажу о пути разработки Galactic Kittens, от прототипа до стабильного релиза, и о том, как вы можете использовать этот образец, чтобы начать свой собственный многопользовательский проект.

Что такое Galactic Kittens?

Прежде чем я погружусь в его разработку, вот краткий обзор нашей новой образцовой игры Galactic Kittens. Этот образец – это 2D кооперативное космическое приключение, предназначенное для того, чтобы помочь вам изучить некоторые основы многопользовательской сетевой игры.

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

  • Управление сетевыми сессиями с автоматическим переключением сцен
  • Базовая синхронизация 2D-движения, включая изменения в спрайт-листах
  • Создание игровых объектов во время выполнения на стороне сервера
  • Передача прав собственности на основных игроков от сервера к клиенту
  • Создание VFX для всех подключенных клиентов
  • Как воспроизводить звуковые эффекты и музыку для всех клиентов
  • Коммуникация статистики игроков и игры (здоровье, побежденные враги и т. д.) и отображение их на пользовательском интерфейсе игры

Вы можете узнать больше о Галактических Котятах на нашем веб-сайте, или скачать образец напрямую с GitHub, чтобы начать изучать код.

Как были созданы Галактические Котята?
Обучение во время разработки

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

С этими ресурсами я начал очень просто, ознакомившись с основными сетевыми концепциями и терминологией, используя нашу документацию Unity Multiplayer. Затем я следовал учебникам проекта Привет, мир и изучал доступные краткие примеры, чтобы начать получать результаты.

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

Да, это моя первая попытка сделать Галактических Котов реальностью.

На этом этапе не было ни пользовательского лобби, ни реального интерфейса, ни реального управления подключениями – вы понимаете. Прототип состоял всего из двух равных кораблей (с тремя очками здоровья каждый), которые двигались по экрану и стреляли кубическим снарядом, когда вы нажимали пробел. Этого было достаточно, чтобы показать спавн объектов и синхронизацию движения между клиентами.

Это был старт, но я знал, что Bromio поможет нам достичь финишной линии и превратить это в рабочий образец.

От прототипа к исследованию космоса

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

Чтобы работать более эффективно, мы разбили игру на изолированные компоненты, чтобы начать разработку параллельно – художники работали над активами, а программисты над основной логикой игры.

Вот взгляд на эволюцию художественного стиля в Галактических Котятах.

Тем временем, главный разработчик Бромио и я открывали интересные и сложные аспекты создания Галактических Котов в работающий образец игры.

Управление подключениями

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

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

На экране выбора персонажа большой проблемой было убедиться, что мы учитываем событие отключения клиента и обрабатываем это событие через интерфейс.

Мы решили, что пользователи не должны иметь возможность выбирать одного и того же персонажа, чтобы показать, как разработчики могут на самом деле сделать это в своих собственных играх. (На самом деле проще позволить игрокам выбирать одного и того же персонажа, так как нет дополнительных ограничений.)

Экран выбора персонажа из образца игры Галактические Коты.

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

Базовые враги

Мы хотели сохранить игровой процесс простым, без сложного ИИ или замысловатой логики поведения для врагов или метеоритов, которые видят игроки. Таким образом, мы могли предоставить полный образец игры, не отвлекая внимание от показа пользователям, как использовать библиотеку NGO.

Таким образом, есть два основных типа врагов и одно препятствие в виде метеорита:

Космический Стрелок Космический Призрак Метеорит

Оба врага выбирают случайный паттерн движения, в то время как враг Космический Стрелок – единственный, который на самом деле стреляет обратно лазерами врагов. Пожалуйста, обратитесь к нашему руководству для разработчиков для получения дополнительной информации о том, как эти враги созданы и как вы можете добавить свою собственную логику.

Битва с боссом

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

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

Гифка "предупреждение" из образца игры Galactic Kittens

Поведение босса структурировано как конечный автомат (FSM), который случайным образом выбирает, какой набор атак применить к подключенным игрокам. Для этого мы использовали класс C# под названием BossController, который обрабатывает переход от одного состояния босса к другому. Проверьте руководство разработчика для получения информации о коде, стоящем за этой битвой, и о том, как вы можете добавить свои собственные состояния босса.

Что помогло нам на этом пути?
Сообщество многопользовательских игр

Ресурс №1, который помог нам добиться успеха в нашей миссии по созданию этой образцовой игры, заключался в том, чтобы присоединиться к серверу Discord Multiplayer Networking и задавать вопросы сообществу. Здесь мы смогли пообщаться с другими разработчиками, которые создают многопользовательские игры, а также поговорить с создателями сервиса Unity для многопользовательских игр. Совокупный объем знаний был более чем достаточен, чтобы помочь нам достичь финишной черты.

Документация по многопользовательским играм

Работа в Unity означает, что я могу сотрудничать с людьми, разбирающимися в сетевых технологиях, которые усердно работают над разработкой полезных ресурсов и документации, предназначенной для помощи всем, кто хочет начать разработку многопользовательских игр. Сайт документации по многопользовательским играм Unity не раз выручал – от знакомства с базовой терминологией сетевого взаимодействия до работы с задержками и фактического кодирования с NGO.

Что мы будем изучать дальше?

Мы определенно рады Galactic Kittens. Мы хотели бы, чтобы вы и будущие пользователи NGO использовали этот образец как шаг в правильном направлении на вашем пути к обучению многопользовательским играм. Пожалуйста, не стесняйтесь обращаться в сервер Discord или форумы, чтобы задать вопросы или предоставить отзывы и предложения.

Одно из вещей, которые я стремлюсь узнать, это как добавить объектный пул в образец многопользовательской игры. Это техника, которая позволяет вам заранее выделить необходимую память для объектов, которые повторно появляются во время игровой сессии. В предыдущем эксперименте я попробовал эту технику в оффлайн проекте Unity, и она определенно может улучшить эффективность работы вашей игры. Мы применили эту технику к Босс Комната и другим образцам UGS.

Как вы можете начать изучать разработку многопользовательских игр?

Если вы начинаете свое собственное многопользовательское путешествие, то есть много ресурсов, которые моя команда в Unity предоставляет, чтобы облегчить вам задачу.

Я бы рекомендовал начать с страницы Netcode for GameObjects, где вы можете ознакомиться с пакетом. Затем вы можете исследовать NGO через Галактические Котятаобразец или сделать небольшие шаги с мини-образцами.

Как только вы начнете свое путешествие, я рекомендую присоединиться к Discord-серверу Unity Multiplayer Networking и ознакомиться с форумами. И, если вам кажется, что Галактические Котята слишком просты или недостаточно сложны, я определенно рекомендую вам ознакомиться с Босс Комната, которая является полным 3D образцом игры, который поднимает разработку NGO до уровня, готового к производству.

Для того, чтобы вывести вашу игру в онлайн, Unity Gaming Services может помочь вам еще больше – независимо от того, хотите ли вы добавить Лобби или Систему Подбора Игроков, голосовой и текстовый чат с Vivox, или даже решения для хостинга, такие как P2P Relay сервис или Хостинг Игровых Серверов. Счастливого создания!

Чтобы узнать больше о последних тенденциях и будущем многопользовательских игр, прочитайте Отчет о Многопользовательских Играх Unity 2022, который агрегирует результаты более 1,500 ответов на опросы из США, Великобритании, Японии и Кореи.