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

Примечание: если вы ищете отличный справочник о сети UE4, вам нужно проверить это http://cedric-neukirchen.net/2017/02/14/multiplayer-network-compendium/.

Сетевые концепции UE4

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

Во-первых, мультиплеер UE4 основан на модели клиент-сервер. Мы не будем здесь вдаваться в подробности (их можно найти там), сейчас нам просто нужно знать, что есть Серверная часть и Клиентская часть.

Серверная сторона будет отвечать за управление всеми правилами игры, а клиентская сторона будет отвечать за управление входными данными игрока. Соединение между ними будет в основном управляться фреймворком UE4. Знание этого правила важно для того, чтобы знать, где должны размещаться и управляться все данные: например, оценка — это обычно то, чем мы хотим управлять на стороне сервера, то есть она будет храниться сервером (реплицироваться клиентам) и обновляется сервером. Клиент не должен иметь возможности напрямую обновлять счет: он сообщит серверу «этот игрок выполнил это действие», и сервер обработает действие и в конечном итоге обновит счет.

Важными классами для сервера, которые будут хранить состояние игры и управлять им, являются соответственно GameState и GameMode. Все данные, необходимые клиентам, должны храниться в GameState.

Важными классами для клиента являются:

  • PlayerState: содержит все атрибуты игрока, которые должны быть известны каждому игроку, но не являются критическими для игры. Это может быть имя игрока, его лучший результат и так далее. Но мы не будем хранить позицию игрока в этом классе.
  • PlayerController: интерфейс между игроком-человеком и пешкой.
  • Пешка: самый важный класс, он будет представлять игрока в игре, будет реагировать на ввод игрока, и его атрибуты будут реплицироваться на сервер и на всех других игроков.

Затем это то, что в основном произойдет при подключении игрока на стороне сервера: GameMode получит событие с подключением игрока (PlayerController будет параметром события), затем GameMode создаст пешку и воздействовать на Pawn на PlayerController (PlayerController будет владеть вновь созданной Pawn). После этого игрок на стороне клиента сможет управлять Пешкой, созданной сервером.

Наконец, последнее, что важно знать, это то, что если мы хотим, чтобы что-то реплицировалось для всех игроков, оно должно быть помечено как Реплицировано и должно выполняться на стороне сервера.

В соответствии с этим следующие шаги для реализации нашей многопользовательской игры:
— Определение пешки, которой будет управлять клиент
— Обработка соединения игроков и предоставление им пешек для управления
— И протестировать

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

Реализация серверной логики

Пешка будет создана на стороне сервера. GameMode будет отвечать за их создание, а управлять ими будет сервер.

Давайте определим нашу пешку BP_Sphere_Pawn. Это просто сфера с методом MoveUp.

По умолчанию Pawn реплицируется по сети, но мы должны указать, что хотим, чтобы компоненты реплицировались.

Теперь в GameMode мы будем реагировать на подключение игрока, создавая новую SpherePawn и заставляя игрока ею владеть:

Здесь, когда новый игрок запускается, мы находим старт игрока на текущей карте сервера и создаем BP_Sphere_Pawn в этом месте (со стратегией Пытаться настроить местоположение, но всегда создавать), затем мы заставляем игрока владеть этой пешкой.

Реализация клиентской логики

На стороне клиента мы создадим PlayerController, который будет вызывать метод MoveUp своей Pawn при нажатии пробела:

MoveUp нужно запускать на стороне сервера, потому что он должен быть известен всем клиентам. Вот почему мы вызываем его в событии с атрибутом Выполнить на сервере.

Тестирование сети с помощью редактора

Все почти настроено. Нам просто нужно выбрать правильный GameMode, и тогда мы можем просто начать игру с двумя игроками:

Затем, когда нажимается Play, должны появиться два окна. При нажатии клавиши пробела в одном из окон соответствующая сфера должна перемещаться в обоих окнах. При нажатии пробела в другом окне другая сфера должна двигаться в обоих окнах.

Вывод

Папку Content для этого проекта можно найти здесь: MultiSphere.

В этом уроке мы увидели основные принципы сети Unreal Engine 4 и то, как быстро настроить что-то работающее. Если вы будете следовать другим руководствам в сети, теперь вы можете сделать что-то великолепное.

Мы продолжим освещать тему сети UE4 в следующих уроках и углубимся в объяснения. Если вы хотите знать, когда выходят новые статьи, вы можете следить за нами в Twitter и Facebook.

Первоначально опубликовано на https://isaratech.com 17 июня 2019 г.