Полезное

Мы Вконтакте

Discord канал

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

Добавлено Ноя 19 2014

1.Компиляция движка из исходников.

Вам понадобятся исходники движка, поскольку они потребуются для компиляции серверного решения в Visual Studio.

Для этого посетите официальный репозиторий Unreal Engine 4 на GitHub:

https://github.com/EpicGames/UnrealEngine

2. Выбор версии движка

Из README:

Последние приготовления. Настройте Windows так, чтобы вы могли взаимодействовать с .uproject-файлами. Для этого найдите «UnrealVersionSelector-Win64-Shippping.exe» в папке UnrealEngine/Engine/Binaries/Win64/ и запустите. Теперь проект будет запускаться двойным щелчком по .uproject-файлам, а нажатие ПКМ по ним позволит быстро обновить файлы Visual Studio.

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

 

3. Использование проекта с Visual Studio и движком, скомпилированным из исходников.

Нажмите ПКМ по вашему .uproject-файлу и измените версию движка на «source-built engine». Лучше всего, чтобы в вашем проекте был код. Достаточно пустого класса (вы сможете удалить его позже).

После этого перейдите в корневую папку проекта и щелкните ПКМ по .uproject-файлу, чтобы сгенерировать файлы для Visual Studio.

 

4.Создание <МойПроект>Server.Target.cs

Выделенному серверу необходим контент. Зайдите в File -> Package Project -> Packaging settings. Здесь вы найдете несколько опций:

 

  • Use Pak File (Использовать Pak-файл): запаковать все ассеты в один .pak-файл – отключите, если вам требуется сохранить обычную структуру контента (например, для дополнительных загрузок контента)
  • Full Rebuild (Полная компиляция): Возможно, вы захотите отключить эту функцию, дабы уменьшить время запаковки.

 

После этого перейдите в File -> Package Project -> Package Windows/Linux и выберите папку. Теперь запаковывайте контент и компилируйте клиент.

Следующим шагом будет компиляция серверного кода с помощью Visual Studio. Первым дело нужно настроить серверный target для UnrealBuildTool.

Можно использовать следующий пример:

 


// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

using System.Collections.Generic;

public class GameServerTarget : TargetRules

{

public GameServerTarget(TargetInfo Target)

{

Type = TargetType.Server;

}

//

// TargetRules interface.

//

public override void SetupBinaries(

TargetInfo Target,

ref List OutBuildBinaryConfigurations,

ref List OutExtraModuleNames

)

{

base.SetupBinaries(Target, ref OutBuildBinaryConfigurations, ref OutExtraModuleNames);

OutExtraModuleNames.Add("Game");

}

public override void SetupGlobalEnvironment(

TargetInfo Target,

ref LinkEnvironmentConfiguration OutLinkEnvironmentConfiguration,

ref CPPEnvironmentConfiguration OutCPPEnvironmentConfiguration

)

{

if (UnrealBuildTool.UnrealBuildTool.BuildingRocket())

{

UEBuildConfiguration.bCompileLeanAndMeanUE = true;

// Don't need editor or editor only data

UEBuildConfiguration.bBuildEditor = false;

UEBuildConfiguration.bBuildWithEditorOnlyData = false;

UEBuildConfiguration.bCompileAgainstEngine = true;

// no exports, so no need to verify that a .lib and .exp file was emitted by the linker.

OutLinkEnvironmentConfiguration.bHasExports = false;

}

else

{

// Tag it as a UE4Game build

OutCPPEnvironmentConfiguration.Definitions.Add("UE4GAME=1");

}

}

public override bool GetSupportedPlatforms(ref List OutPlatforms)

{

// It is valid for only server platforms

return UnrealBuildTool.UnrealBuildTool.GetAllServerPlatforms(ref OutPlatforms, false);

}

public override List GUBP_GetPlatforms_MonolithicOnly(UnrealTargetPlatform HostPlatform)

{

if (HostPlatform == UnrealTargetPlatform.Mac)

{

return new List();

}

return new List { HostPlatform, UnrealTargetPlatform.Win32, UnrealTargetPlatform.Linux };

}

public override List GUBP_GetConfigs_MonolithicOnly(UnrealTargetPlatform HostPlatform, UnrealTargetPlatform Platform)

{

return new List { UnrealTargetConfiguration.Development };

}

}

 

Просто замените везде «Game» на название вашего проекта. Сохраните файл как <МойПроект>Server.Target.cs и сгенерируйте заново файлы проекта. Откройте Visual Studio, установите конфигурацию на сервер и выберите целевую платформу. Теперь скомпилируйте ваш проект.

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

 

5. Подготовка к упаковке контента

В этот момент могут появиться разные ошибки (“The game module could not be found” и подобные). Стоит перекомпилировать проект в Visual Studio.

 

6. Подготовка к упаковке контента в Unreal Frontend для сервера

Откройте в Visual Studio исходники движка и скомпилируйте UnrealFronted (шелкните ПКМ по решению «UnrealFrontend» и постройте его), запустите. Файл, скорее всего, находится в папке /Engine/Binaries/Win64.

Как только откроется Unreal Frontend, перейдите во вкладку «Project Launcher» и нажмите на кнопку «Advanced». Создайте пользовательский профиль, назвав его, скажем, «<МойПроект> Dedicated Server». Выберите конфигурацию под Windows и любые карты, которые хотите. Запустите процесс. После окончания работы можно приступить к компилированию выделенного сервера из исходников в Visual Studio.

 

7. Компиляция выделенного сервера из исходников

Вернитесь в Visual Studio, выберите серверное решение (к примеру, «Development Server / Win64») и постройте его. В папке /MyProject/Binaries/ должен находится файл «<МойПроект>Server.exe»

 

8. Создание клиента

Достаточно просто открыть редактор и скомпилировать клиент.

 

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

Двойной щелчок по <МойПроект>Server.exe приведет к тому, что сервер запустится в фоне. Мы же запустим его с помощью командной строки: откройте её и перейдите в директорию с исходниками проекта. Для активации логов добавьте параметр «-log»:

“<МойПроект >Server.exe –log”

Если у вас запущены другие копии сервера, то их стоит закрыть.

Заметьте, что сервер по умолчанию слушает порт 7777.

 

10. Присоединение к серверу

Откройте клиент, который вы создали на 8 шаге. Войдите в консоль, нажав «~» и введите:

«open 127.0.0.1:7777»

Если у вас откроется черный экран, проверьте, что вы установили стандартную серверную карту в настройках проекта в редакторе.

 

11. Активация физики

Возможно, во всяком случае, на версии 4.4.3, при использовании экторов, движение которых основывается на симуляции физики, необходимо будет установить их параметр SkeletalMeshComponent.bEnablePhysicsOnDedicatedServer в значение «true». Выделенный сервер возвращает «true» для IsRunningDedicatedServer(), что предотвращает использование физики для  SkeletalMeshComponents при неактивном значении bEnablePhysicsOnDedicatedServer.

Добавил: Flakky Категория: Статьи


Комментарии
Михаил
38

1. Зачем скачивать исходники??? Можно же скачать всё уже построенное! 2. Куда вставлять Server.target? В файл проекта, код движка?
И вообще. Как не возиться с Visual Studio, а сделать всё чисто редактором и блюпринтами?

Оставить комментарий

Вы должны войти, что бы оставлять комментарии.

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница