Модель сервер-клиент, используемая Unreal Engine, представляет сетевые многопользовательские игры, в которых один сервер выступает в роли хоста игры, а игроки, присоединяющиеся к этой игре, являются клиентами. Истинное состояние игры модерируется сервером, а каждый игрок удаленно управляет своими пешками с помощью автономного прокси. Затем сервер реплицирует изменения для каждого подключенного клиента, так что все игроки получают очень близкое представление об игре, в которую играют на сервере.
В то время как сервер прослушивания представляет собой игрока, размещающего игру на своем компьютере, выделенный сервер — это сервер, который работает без игрока. Безголовый сервер не отображает визуальные эффекты, и на нем никто не играет локально. Это позволяет выделенному серверу сосредоточиться на логике игрового процесса и модерировании входящей информации от клиентов, максимально используя свои ресурсы для размещения игры. Кроме того, это обеспечивает равные условия для всех игроков, участвующих в многопользовательской игре. В то время как прослушивающий сервер часто подходит для казуальной многопользовательской и совместной игры, выделенные серверы идеально подходят для крупномасштабных или соревновательных игр.
Это практическое руководство покажет вам, как собрать и упаковать выделенный сервер для ваших собственных многопользовательских игр.
1. Необходимые настройки
Чтобы выполнить шаги, описанные в этом руководстве, ваш проект должен удовлетворять следующим требованиям:
Вы должны использовать исходную сборку Unreal Engine, которую можно загрузить с Github Epic Games.
Если в вашем проекте используется бинарная сборка из Epic Games Launcher, вам нужно будет перенести ее на исходную сборку Github.
У вас должен быть проект C++, поддерживающий многопользовательский игровой процесс сервер-клиент.
Если вы используете проект Blueprint, вам нужно будет преобразовать его в проект C++, прежде чем вы сможете продолжить.
В этом примере в качестве примера будет использоваться новый проект из шаблона от третьего лица.
2. Настройка целей для сборки сервера
Выделенные серверы — это отдельная цель сборки для вашего проекта. Когда вы создаете его, вы создаете другой исполняемый файл по сравнению с базовой игрой. Вместо «TestProjectGame.exe» он будет называться «TestProjectServer.exe», и запуск этого исполняемого файла приведет к запуску выделенного сервера на вашем компьютере. Этот раздел проведет вас через процесс добавления цели сборки сервера в ваш проект и ее компиляции.
1. Откройте решение C++ для вашего проекта. Оно будет находиться в папке вашего проекта. Здесь он называется TestProject.sln.
2. В обозревателе решений разверните папку Source и найдите файл [Project].Target.cs. Это цель сборки по умолчанию для вашего проекта. Существует также файл [Project]Editor.Target.cs для настройки сборки Unreal Editor для этого проекта. Мы создадим цель сборки сервера в этом же каталоге.
3. Откройте исходную папку в проводнике Windows. Создайте копию [ProjectName].Target.cs и переименуйте ее в [ProjectName]Server.Target.cs. Здесь результирующий файл называется TestProjectServer.Target.cs.
4. Вернитесь в Visual Studio, затем щелкните и перетащите *Server.Target.cs из окна проводника в исходную папку в обозревателе решений.
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.
7. Выберите конфигурацию сборки Development Editor.
8. Создайте свое решение, щелкнув Build > Build Solution на панели инструментов. Вы также можете сделать это через контекстное меню в окне обозревателя решений.
9. Выберите конфигурацию сборки сервера разработки и снова соберите решение.
10. Найдите папку Binaries/Win64 вашего проекта. В этой папке вы должны увидеть файлы сервера, включая [ProjectName]Server.exe.
3. Настройка входа и карт по умолчанию
Чтобы протестировать наш выделенный сервер, нам нужно настроить карты по умолчанию для нашего проекта, чтобы на сервере запускалась играбельная карта и чтобы пользователи могли подключаться к серверу. Есть много способов сделать это, но самый быстрый и прямой способ — создать поток подключения непосредственно в карте входа пользователя, когда он запускает приложение.
1. Откройте свой проект в Unreal Editor. В Content Browser обязательно переместите все файлы уровней в папку Content/Maps. Это можно сделать, переместив папку Maps из ThirdPersonCPP в базовую папку Content.
2. Создайте новый уровень под названием [ProjectName]Entry, где [ProjectName] замените на название вашего проекта. В этом примере он будет называться TestProjectEntry. Вы можете сделать это с пустой картой в качестве начального шаблона.
3. Откройте карту Entry, затем откройте скрипт Level Blueprint. Из узла BeginPlay добавьте узел Open Level и присвойте ему значение 127.0.0.1. Это ваш локальный IP-адрес, что означает, что вы указываете игре подключиться к серверу, расположенному на вашем собственном компьютере. Если вы замените это значение действительным IP-адресом, вместо этого вы подключитесь к серверу, расположенному по этому адресу.
4. Откройте ThirdPersonExampleMap и удалите персонажа от третьего лица, который обычно предварительно размещается на уровне. Вместо этого убедитесь, что на уровне есть два PlayerStart. Это гарантирует, что когда игроки подключатся, у них будет постоянный опыт запуска.
5. Откройте «Настройки проекта», перейдите в «Проект» > «Карты и режимы» и разверните «Карты по умолчанию». Измените их на следующие:
Это гарантирует, что сервер открывается непосредственно на ThirdPersonExampleMap, а пользователи открывают карту Entry и подключаются к серверу.
4. Упаковка вашего проекта
1. Щелкните File > Packaging > Packaging Settings, чтобы открыть настройки упаковки.
2. Разверните дополнительные настройки в нижней части раздела «Packaging», нажав прямоугольную кнопку со стрелкой.
3. Найдите Список карт для включения в пакетную сборку и добавьте карту Entry и ThirdPersonExampleMap.
4. Щелкните File > Package Project > Windows (64-bit) и выберите каталог для упаковки вашего проекта. Здесь мы используем TestProject/Packaged в качестве выходной папки.
5. Нажмите File > Package Project > Build Target. Вы должны увидеть сервер [ProjectName] рядом с обычной целью сборки. Выберите этот параметр.
6. Снова упакуйте проект и выберите ту же выходную папку, что и раньше. Теперь рядом с WindowsNoEditor должна быть папка с именем WindowsServer.
5. Запуск и тестирование выделенного сервера
Наконец, пришло время протестировать наш выделенный сервер.
1. Откройте папку WindowsServer, которую вы создали в предыдущем разделе, затем найдите [ProjectName]Server.exe. Здесь он называется TestProjectServer.exe.
2. Создайте ярлык для Server.exe, отредактируйте его имя и добавьте в конец «- ThirdPersonExampleMap». Здесь мы переименовали его в TestProjextServer.exe — ThirdPersonExampleMap.
3. Щелкните правой кнопкой мыши ярлык сервера и откройте его свойства. Добавьте «-log» в конец поля «Цель» и нажмите «Применить».
4. Дважды щелкните на ярлык, чтобы запустить выделенный сервер. Откроется окно командной строки с выводом журнала. Если запуск сервера прошел успешно, вы увидите вывод о том, сколько секунд потребовалось, чтобы поднять уровень.
5. Перейдите в папку WindowsNoEditor и дважды щелкните TestProject.exe. Игра запустится в новом окне и, по-видимому, перейдет непосредственно к ThirdPersonExampleMap.
6. Используйте ALT+Tab, чтобы выйти из окна игры, затем запустите TestProject.exe, чтобы запустить второй экземпляр игры. В случае успеха вы увидите плеер из запущенного вами окна. Вы также можете проверить журнал сервера, чтобы увидеть подтверждение подключения обоих игроков к серверу.
Поздравляем! Вы успешно собрали, упаковали и протестировали выделенный сервер для своего проекта.
Дополнительно
- Этот пример научит вас основам сборки, упаковки и тестирования сервера на вашем локальном компьютере. Следующим шагом будет предоставление функционирующего внешнего интерфейса, расширение игрового процесса вашей игры и предоставление игрокам средств для подключения к вашему выделенному серверу через Интернет.
- Чтобы увидеть пример рабочего интерфейса, вы можете обратиться к примеру проекта ShooterGame, который использует его на карте ShooterEntry.
- Чтобы начать расширять свой игровой процесс, вы можете обратиться к Краткому руководству по сетевой многопользовательской игре.
- Чтобы подключиться к серверу по сети, вы можете указать IP-адрес этого сервера вместо 127.0.0.1. Вы можете включить это в простой пользовательский интерфейс UMG вместо того, чтобы запускать BeginPlay на карте входа. Вы также можете использовать команду «открыть» в консоли и указать IP-адрес вместо имени уровня.