Уроки Unity 3D для детей: пошаговая инструкция о том, как сделать мультиплеер в Юнити
Школа программирования «Пиксель» продолжает бесплатный курс по Юнити для желающих освоить искусство разработки игр. Курс по созданию игры на Юнити поможет школьнику овладеть информацией о геймдеве и научиться делать игры.
Сегодняшнее занятие по программированию для детей в Unity посвящено мультиплееру: это подскажет, как изобрести многопользовательскую игру — а значит, весело проводить время с друзьями. Осталось включить программу и следовать плану обучения Unity.
Обучение по созданию игр на Unity: делаем уровень
Начинаем обучение разработке на Unity. Воспроизведем тестовый уровень. Добавляем Plane и опускаем на 0.5. Игрок отображается в виде куба. Переименуем его и создадим папку с материалами. Далее перекрашиваем игрока в красный цвет и переносим новый материал на объект.
Уровень в Unity для мультиплеера
Программирование Юнити для детей: подключение пакетов
Открываем Package Manager. Переключаем на Unity Registry, в поиске ищем Netcode for GameObjects. Этот набор инструментов понадобится для внедрения мультиплеера. Дожидаемся установки. Добавляем Multiplayer Tools — пакет, который облегчает разработку мультиплеера.
Подключение пакетов для мультиплеера Unity
Создание Network Manager в процессе обучения Unity для детей
Переходим на сцену. Создаем пустой объект и называем Network Manager. Далее подключаем скрипт Network Manager и выбираем Unity Transport как тип передачи данных. В скрипте следует подключить префаб игрового персонажа, так что сначала сделаем его.
Подключаем префаб для мультиплеера в Юнити
Unity-обучение бесплатно: префаб игрока
Делаем папку Scripts, в ней — скрипт Player Control. Напишем функцию Move, отвечающую за перемещение, и зададим вектор направления.
Пропишем условия, при которых будем менять вектор moveDirection в соответствии с нажатой клавишей. Далее объявим переменную скорости перемещения. В конце прибавим к компоненту transform игрока значение, на которое он должен сместиться: направление, умноженное на скорость и время.
Префаб игрока для мультиплеера в Юнити Переходим в Unity и переносим скрипт на игрока. Далее создаем папку prefubs, где будем хранить префаб. Переносим туда объект, а со сцены удаляем.
Для объявления игрока объектом, необходимым для передачи по сети, добавляем к нему скрипт Network Object. Подключаем префаб к Network Manager в поле Player Prefub, внедряем в список Network Prefabs. Player Prefub назначится любому, кто присоединится к игре. Список нужен для регистрации префабов, что участвуют в сетевом взаимодействии.
Префаб игрока для мультиплеера в Юнити
Сборка игры в ходе обучения по разработке игр в Unity
Далее настроим сборку игры. Переходим в build settings и нажимаем на Add Open Scenes, чтобы добавить открытые сцены в сборку. Выбираем Player Settings и выставляем оконный режим игры. Проверяем. У Network Manager нажимаем на кнопку Start Host. Появляется игрок, являющийся сервером, к которому подключаются другие игроки — клиенты.
Управление не работает — идем в скрипт управления персонажем. Проблема выявлена: нужно было вызвать метод передвижения в Update. Запускаем, выбираем Network Manager и спавним игрока в качестве хоста. Передвижение работает.
Создание мультиплеерной игры в Юнити
Создание интерфейса по уроку программирования в Юнити
Делаем интерфейс для сетевого подключения в игре. Формируем канвас. В канвасе создаем пустой объект и называем Network Manager UI.
Переместимся к канвасу, нажав по нему двойным щелчком мыши. Перейдем в 2D-режим. Растянем NetworkManagerUI по канвасу и привяжем к центру: нажмем на иконку с зажатыми клавишами Shift и Alt.
Добавим кнопки интерфейсу. Button text mesh pro требует импорта компонентов. Привяжем кнопку к правой стороне экрана и отодвинем от края. Переименуем ее и перепишем текст. Затем копируем готовую кнопку, меняем текст и название.
Теперь напишем скрипт для работы кнопок.
Создание скриптов для кнопок в мультиплеере Юнити Переходим в Scripts и создаем скрипт NetworkManagerUI. Удаляем ненужное. Объявляем поля для кнопок. Сделаем их приватными, а чтобы привязать их через Unity, добавим serializeField.
Объявляем функцию Awake, которая вызывается один раз сразу после создания объекта. По нажатию на кнопку Host будем спавнить хоста — игрока, к ПК которого присоединяются остальные. Копируем и меняем код для подключения клиента.
Если при написании кода автоматически не подключились библиотеки — делаем это вручную. Идем в Unity и присоединяем скрипт к объекту. К самому скрипту подключаем соответствующие кнопки.
Соберем проект, запустим и сохраним на рабочем столе. В оконной версии игры зайдем как хост, а в Юнити подключимся как клиент. Как хост, так и клиент подключились и видят друг друга. Однако нет раздельного управления.
Проверка мультиплеера на Юнити
Обучение Unity: разделение управления и установка доверия клиенту
Добавим на игрока Player Transform и уберем из синхронизации лишние компоненты. Нужно передавать по сети только необходимые данные: так увеличивается скорость передачи и уменьшается вероятность ошибок.
Перейдем в Player Control, в Update напишем условие. Если объекту не принадлежит скрипт, который он хочет выполнить, выходим. Чтобы код сработал, будем наследовать класс Player Control от NetworkBehaviour, а еще подключим библиотеку NetCode. Сохраняем и переходим в Unity.
Собираем игру заново. Заходим за хоста — управление работает. Запускаем в Юнити и заходим за клиента. Управление разделилось, но клиент не управляется.
Разделение управления и установка доверия клиенту в игре Юнити Для решения проблемы напишем скрипт ClientNetworkTransform. Удаляем лишнее и переопределяем метод OnIsServerAuthoritative. Вместо true метод будет возвращать false. Таким образом объявляем, что доверяем клиенту, и он сам может управлять собственными данными по перемещению.
Для соревновательной игры метод не подойдет: увеличивается шанс читерства со стороны клиента посредством отправки поддельных данных.
Поменяем наследуемый класс на NetworkTransform. Сохраняем и идем в Unity. После выбираем префаб игрока и удаляем с него NetworkTransform. На его место ставим ClientNetworkTransform и не забываем убрать лишнюю синхронизацию данных.
Доработки мультиплеера в Юнити Собираем проект — все работает.
Мультиплеер в Unity готов
Обучение Unity 3D: что дальше
Урок по Юнити на тему мультиплеера окончен. Помните, что добавление мультиплеера для каждой игры требует вдумчивого подхода и зависит от конкретных потребностей.
Подробную информацию о Netcode for GameObjects можно получить, изучив его документацию и руководство Unity.
Другие уроки по обучению Unity онлайн — в плейлисте школы «Пиксель». Бесплатный курс по Юнити 3д в видеороликах поможет познакомиться с платформой, освоить язык С# (Си Шарп) и получить ответы на вопросы:
с чего начать онлайн-обучение Си Шарп;
чему учат на курсах по Юнити 3д;
как стать разработчиком с Unity-обучением.
Хотите глубже разобраться в Юнити — записывайтесь на курс по Unity школы программирования «Пиксель». Учим детей10–14 лет смотреть на игры глазами инженера-разработчика и знакомим с IT-терминологией. Пройдя курс обучения Unity, ребенок обретет базу знаний по кодингу и научится конструировать 2D- и 3D-игры. Обучение на разработчика игр на Unity подарит увлекательное хобби и будущее любимое дело жизни.
Скрипты к уроки Unity 3D для детей:
NetworkManagerUI
using Unity.Netcode; using UnityEngine; using UnityEngine.UI;
public class NetworkManagerUI : MonoBehaviour { [SerializeField] private Button hostButton; [SerializeField] private Button clientButton;
if (Input.GetKey(KeyCode.W)) moveDirection.z = +1f; if (Input.GetKey(KeyCode.A)) moveDirection.x = -1f; if (Input.GetKey(KeyCode.S)) moveDirection.z = -1f; if (Input.GetKey(KeyCode.D)) moveDirection.x = +1f;