Найти тему

Создание выделеного сервера на Unreal Engine 4/5

Оглавление

Модель сервер-клиент, используемая Unreal Engine, представляет сетевые многопользовательские игры, в которых один сервер выступает в роли хоста игры, а игроки, присоединяющиеся к этой игре, являются клиентами. Истинное состояние игры модерируется сервером, а каждый игрок удаленно управляет своими пешками с помощью автономного прокси. Затем сервер реплицирует изменения для каждого подключенного клиента, так что все игроки получают очень близкое представление об игре, в которую играют на сервере.

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

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

1. Необходимые настройки

Чтобы выполнить шаги, описанные в этом руководстве, ваш проект должен удовлетворять следующим требованиям:

Вы должны использовать исходную сборку Unreal Engine, которую можно загрузить с Github Epic Games.

Если в вашем проекте используется бинарная сборка из Epic Games Launcher, вам нужно будет перенести ее на исходную сборку Github.

У вас должен быть проект C++, поддерживающий многопользовательский игровой процесс сервер-клиент.

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

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

2. Настройка целей для сборки сервера

Выделенные серверы — это отдельная цель сборки для вашего проекта. Когда вы создаете его, вы создаете другой исполняемый файл по сравнению с базовой игрой. Вместо «TestProjectGame.exe» он будет называться «TestProjectServer.exe», и запуск этого исполняемого файла приведет к запуску выделенного сервера на вашем компьютере. Этот раздел проведет вас через процесс добавления цели сборки сервера в ваш проект и ее компиляции.

1. Откройте решение C++ для вашего проекта. Оно будет находиться в папке вашего проекта. Здесь он называется TestProject.sln.

Если у вас нет решения C++, вы можете щелкнуть правой кнопкой мыши по файлу .uproject и выбрать Создать файлы проекта Visual Studio, чтобы создать его.
Если у вас нет решения C++, вы можете щелкнуть правой кнопкой мыши по файлу .uproject и выбрать Создать файлы проекта Visual Studio, чтобы создать его.

2. В обозревателе решений разверните папку Source и найдите файл [Project].Target.cs. Это цель сборки по умолчанию для вашего проекта. Существует также файл [Project]Editor.Target.cs для настройки сборки Unreal Editor для этого проекта. Мы создадим цель сборки сервера в этом же каталоге.

-2

3. Откройте исходную папку в проводнике Windows. Создайте копию [ProjectName].Target.cs и переименуйте ее в [ProjectName]Server.Target.cs. Здесь результирующий файл называется TestProjectServer.Target.cs.

-3

4. Вернитесь в Visual Studio, затем щелкните и перетащите *Server.Target.cs из окна проводника в исходную папку в обозревателе решений.

-4

5. Откройте [ProjectName]Server.Target.cs и замените его содержимое следующими инструкциями к целевому файлу:

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

using System.Collections.Generic;

public class TestProjectServerTarget : TargetRules //Change this line according to the name of your project

{

public TestProjectServerTarget(TargetInfo Target) : base(Target) //Change this line according to the name of your project

{

Type = TargetType.Server;

DefaultBuildSettings = BuildSettingsVersion.V2;

ExtraModuleNames.Add("TestProject"); //Change this line according to the name of your project

}

}

Обязательно замените все экземпляры "TestProject" именем вашего собственного проекта.

6. Найдите файл .uproject для вашего проекта в его базовом каталоге, затем щелкните его правой кнопкой мыши и выберите «Создать файлы проекта Visual Studio». Это повторно сгенерирует решение Visual Studio для вашей игры и обнаружит ваш файл *Server.Target.cs.

-5

7. Выберите конфигурацию сборки Development Editor.

-6

8. Создайте свое решение, щелкнув Build > Build Solution на панели инструментов. Вы также можете сделать это через контекстное меню в окне обозревателя решений.

9. Выберите конфигурацию сборки сервера разработки и снова соберите решение.

-7

10. Найдите папку Binaries/Win64 вашего проекта. В этой папке вы должны увидеть файлы сервера, включая [ProjectName]Server.exe.

Этот исполняемый файл вы будете использовать для развертывания выделенного сервера.
Этот исполняемый файл вы будете использовать для развертывания выделенного сервера.

3. Настройка входа и карт по умолчанию

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

1. Откройте свой проект в Unreal Editor. В Content Browser обязательно переместите все файлы уровней в папку Content/Maps. Это можно сделать, переместив папку Maps из ThirdPersonCPP в базовую папку Content.

-9

2. Создайте новый уровень под названием [ProjectName]Entry, где [ProjectName] замените на название вашего проекта. В этом примере он будет называться TestProjectEntry. Вы можете сделать это с пустой картой в качестве начального шаблона.

-10

3. Откройте карту Entry, затем откройте скрипт Level Blueprint. Из узла BeginPlay добавьте узел Open Level и присвойте ему значение 127.0.0.1. Это ваш локальный IP-адрес, что означает, что вы указываете игре подключиться к серверу, расположенному на вашем собственном компьютере. Если вы замените это значение действительным IP-адресом, вместо этого вы подключитесь к серверу, расположенному по этому адресу.

Обычно карта входа — это место, где вы настраиваете пользовательский интерфейс главного меню. В этом примере начальный уровень просто подключается напрямую к собственному локальному IP-адресу пользователя, чтобы мы могли быстро подключиться к выделенному серверу. Пример полнофункциональной карты входа с пользовательским интерфейсом см. в примере проекта ShooterGame.
Обычно карта входа — это место, где вы настраиваете пользовательский интерфейс главного меню. В этом примере начальный уровень просто подключается напрямую к собственному локальному IP-адресу пользователя, чтобы мы могли быстро подключиться к выделенному серверу. Пример полнофункциональной карты входа с пользовательским интерфейсом см. в примере проекта ShooterGame.

4. Откройте ThirdPersonExampleMap и удалите персонажа от третьего лица, который обычно предварительно размещается на уровне. Вместо этого убедитесь, что на уровне есть два PlayerStart. Это гарантирует, что когда игроки подключатся, у них будет постоянный опыт запуска.

-12

5. Откройте «Настройки проекта», перейдите в «Проект» > «Карты и режимы» и разверните «Карты по умолчанию». Измените их на следующие:

-13
-14

Это гарантирует, что сервер открывается непосредственно на ThirdPersonExampleMap, а пользователи открывают карту Entry и подключаются к серверу.

4. Упаковка вашего проекта

1. Щелкните File > Packaging > Packaging Settings, чтобы открыть настройки упаковки.

2. Разверните дополнительные настройки в нижней части раздела «Packaging», нажав прямоугольную кнопку со стрелкой.

-15

3. Найдите Список карт для включения в пакетную сборку и добавьте карту Entry и ThirdPersonExampleMap.

-16

4. Щелкните File > Package Project > Windows (64-bit) и выберите каталог для упаковки вашего проекта. Здесь мы используем TestProject/Packaged в качестве выходной папки.

5. Нажмите File > Package Project > Build Target. Вы должны увидеть сервер [ProjectName] рядом с обычной целью сборки. Выберите этот параметр.

-17

6. Снова упакуйте проект и выберите ту же выходную папку, что и раньше. Теперь рядом с WindowsNoEditor должна быть папка с именем WindowsServer.

5. Запуск и тестирование выделенного сервера

Наконец, пришло время протестировать наш выделенный сервер.

1. Откройте папку WindowsServer, которую вы создали в предыдущем разделе, затем найдите [ProjectName]Server.exe. Здесь он называется TestProjectServer.exe.

-18

2. Создайте ярлык для Server.exe, отредактируйте его имя и добавьте в конец «- ThirdPersonExampleMap». Здесь мы переименовали его в TestProjextServer.exe — ThirdPersonExampleMap.

-19

3. Щелкните правой кнопкой мыши ярлык сервера и откройте его свойства. Добавьте «-log» в конец поля «Цель» и нажмите «Применить».

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

4. Дважды щелкните на ярлык, чтобы запустить выделенный сервер. Откроется окно командной строки с выводом журнала. Если запуск сервера прошел успешно, вы увидите вывод о том, сколько секунд потребовалось, чтобы поднять уровень.

-21

5. Перейдите в папку WindowsNoEditor и дважды щелкните TestProject.exe. Игра запустится в новом окне и, по-видимому, перейдет непосредственно к ThirdPersonExampleMap.

6. Используйте ALT+Tab, чтобы выйти из окна игры, затем запустите TestProject.exe, чтобы запустить второй экземпляр игры. В случае успеха вы увидите плеер из запущенного вами окна. Вы также можете проверить журнал сервера, чтобы увидеть подтверждение подключения обоих игроков к серверу.

-22

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

Дополнительно

  • Этот пример научит вас основам сборки, упаковки и тестирования сервера на вашем локальном компьютере. Следующим шагом будет предоставление функционирующего внешнего интерфейса, расширение игрового процесса вашей игры и предоставление игрокам средств для подключения к вашему выделенному серверу через Интернет.
  • Чтобы увидеть пример рабочего интерфейса, вы можете обратиться к примеру проекта ShooterGame, который использует его на карте ShooterEntry.
  • Чтобы начать расширять свой игровой процесс, вы можете обратиться к Краткому руководству по сетевой многопользовательской игре.
  • Чтобы подключиться к серверу по сети, вы можете указать IP-адрес этого сервера вместо 127.0.0.1. Вы можете включить это в простой пользовательский интерфейс UMG вместо того, чтобы запускать BeginPlay на карте входа. Вы также можете использовать команду «открыть» в консоли и указать IP-адрес вместо имени уровня.