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

Еще одна неприятность с этой версией движка в том, что последней поддерживаемой версией IDE для него была VS 2019. Что неприятно, так как в 2022 появились плюшки для разработки под UE. А с настройками “по умолчанию” 2022-я студия, или не собирает движок совсем, или собирает его с багами. Причем, результат можно увидеть только через несколько часов томительного ожидания.

Также подразумевается, что вы работаете с ОС Windows 10/11, у вас установлена Visual Studio 2022 и всем этим вы умеете пользоваться. ???? И, естественно, у вас есть доступ к исходникам движка на github.com.

Выбор версий MSVC и WinSDK для сборки UE4

Предварительно в студии надо установить:

  • MSVC версии 142 - средства сборки С++ для VS 2019 для х64/х86 (версия 14.29-16.11)

  • Пакет SDK для Windows 10 (10.0.18362.0)

По умолчанию UnrealBuildTool использует самую последнюю (Latest) версию установленных компонентов Visual Studio, что может привести к сборке движка с багами. Поэтому необходимо изменить конфигурацию сборки движка (подробные инструкции читаем в документации по Build Configuration). Конфигурационный файл может лежать в нескольких местах, например тут:

%USER_FOLDER%\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml

Нам нужен раздел WindowsPlatform и параметры CompilerVersion и WindowsSdkVersion. Значения лучше всего подбирать максимально приближенные к рекомендуемым. Они обычно указываются в Release Notes соотв. движка (4.27) в разделе Platform SDK Upgrades

Итоговый файл BuildConfiguration.xml должен выглядеть так:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
	<WindowsPlatform>
		<CompilerVersion>14.29.30133</CompilerVersion>
		<WindowsSdkVersion>10.0.18362.0</WindowsSdkVersion>
	</WindowsPlatform>
</Configuration>

Debugging Tools for Windows

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

  1. В установленных программах ищем: Windows Software Development Kit - Windows 10.0.18362.1

  2. Жмем на 3 точки справа от нее и выбираем Изменить / Modify

  3. В инсталляторе выбираем пункт Change

  4. Добавляем пункт Debugging Tools for Windows

.Net 4.5 Framework Pack

Примечание: Я не уверен что этот пункт нужен, но на дополнительные 4 часа экспериментов терпения не хватит. У меня в процессе сборки встречались модули движка в которых все еще установлен этот таргет, возможно это из-за неправильных первоначальных настроек.

Так, как поддержка 4.5 уже закончилась, то пойдем окольными путями:

  1. Скачать из NuGet Gallery нужный пакет (Download package справа).

  2. Распаковать как ZIP-архив.

  3. Переместить папку
    build\.NETFramework\v4.5
    в
    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5

.Net Famework 4.6.2

Тут проблем нет, надо просто проверить, что в студии установлены:

  • .Net Famework 4.6.2 Targeting Pack

  • Пакет SDK для .Net Famework 4.6.2.

Установка движка

Поддержка 4.27 продолжается в ветке 4.27-plus. Клонируем исходники в папку UE_4.27:

git clone -b 4.27-plus https://github.com/EpicGames/UnrealEngine.git UE_4.27

Возможны ошибки с выполнением Setup.bat. Исправляем так. В релизах каждой версии добавлен новый файл Commit.gitdeps.xml. Его нужно скачать и заменить им этот файл: Engine/Build/Commit.gitdeps.xml. Комментарий от самих Эпиков:

Per a previous announcement on GitHub Disruption. To remedy related download errors, a new Commit.gitdeps.xml file is attached to this release as an Asset. Please replace the existing Engine/Build/Commit.gitdeps.xml with the attached file.

В папке движка UE_4.27 вызвать:

Setup.bat

Кросс-компиляция для Linux

Это флаг -set:WithLinux=true в скрипте по сборке движка.

Для 4.27 нужен набор инструментов версии 19. Устанавливаем и проверяем правильность установки при помощи команды:

%LINUX_MULTIARCH_ROOT%x86_64-unknown-linux-gnu\bin\clang++ -v

Подробная инструкция в статье Cross-Compiling for Linux.

Компиляция для Android

Это флаг -set:WithAndroid=true в скрипте по сборке движка.

Устанавливаем Android Studio. Можно последнюю версию и с любыми настройками, мы все равно будем переустанавливать все SDK.

После установки и всех обновлений, на экране приветствия выбираем More Actions -> SDK Manager. Убеждаемся что на этом диалоге внизу стоит галочка Show Package Details.

Открываем файл Engine/Extras/Android/SetupAndroid.bat и ищем строку вида:

call "%SDKMANAGER%" "platform-tools" "platforms;android-28" "build-tools;28.0.3" "cmake;3.10.2.4988404" "ndk;21.4.7075529"

Собственно это и есть перечень необходимых SDK для сборки Android игр:

  • Вкладка SDK Platforms. Платформу желательно поставить свежую, например Android 13.0 (Tiramisu) - Android SDK Platform 33. Остальные галочки снять, 28-ю платформу ставить не надо.

  • Вкладка SDK Tools. Android SDK Build-Tools, оставляем 2 версии: самую свежую и 28.0.3.

  • Вкладка SDK Tools. NDK (Side by side), оставляем только 21.4.7075529.

  • Все остальные галочки можно убрать, эмуляторы тоже не понадобятся.

Есть еще такая статья: Setting Up Android SDK and NDK for Unreal. Но относится к ней стоит как к дополнительным материалам, а не как к инструкции для действий.

Модификация движка

Примечание 1: Мой pull request со всеми необходимыми поправками был отменен, поэтому модифицировать движок придется ручками.

Примечание 2: Номера строк могут меняться, поэтому проще поискать в этом месте аналогичный кусочек кода и добавить изменения после него. Ничего нового мы не добавляем, просто расширяем функционал про который разработчики забыли (или забили) добавить.

Файл Engine/Build/InstalledEngineBuild.xml после строки 79 добавить:

<!-- Whether to use VS2022 -->
<Option Name="VS2022" Restrict="true|false" DefaultValue="false" Description="Use Visual Studio 2022 to build Windows targets. By default, Visual Studio 2017 is used for maximum compatibility"/>

В тот же файл Engine/Build/InstalledEngineBuild.xml после строки 117 добавить:

<Property Name="VSCompilerArg" Value="-2022" If="$(VS2022)"/>

Файл Engine/Source/Programs/UnrealBuildTool/Platform/Windows/UEBuildWindows.cs в начало функции TryGetMsBuildPath (строка 1591) добавить:

// Get the Visual Studio 2022 install directory
List<DirectoryReference> InstallDirs2022 = WindowsPlatform.FindVisualStudioInstallations(WindowsCompiler.VisualStudio2022).ConvertAll(x => x.BaseDir);
foreach (DirectoryReference InstallDir in InstallDirs2022)
{
  FileReference MsBuildLocation = FileReference.Combine(InstallDir, "MSBuild", "Current", "Bin", "MSBuild.exe");
  if (FileReference.Exists(MsBuildLocation))
  {
    OutLocation = MsBuildLocation;
    return true;
  }
}

Сборка движка

  1. Убедиться что есть 300+ лишних гигабайт на диске.

  2. Создать файл Build_4.27.bat:

    @ECHO OFF
    
    REM --== Setup ==--
    
    SET MSBuildPath=C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe
    SET EnginePath=E:\EpicGames\UE_4.27
    SET BatchFilesPath=%EnginePath%\Engine\Build\BatchFiles
    SET AutomationToolPath=%EnginePath%\Engine\Binaries\DotNET\AutomationTool.exe
    SET RunUAT=%BatchFilesPath%\RunUAT.bat
    SET BuildPlatform=Win64
    SET GameConfigurations=DebugGame;Development;Shipping
    
    REM --== Building AutomationTool ==--
    
    IF NOT EXIST "%AutomationToolPath%" (
    	"%MSBuildPath%" "%EnginePath%\Engine\Source\Programs\AutomationTool\AutomationTool.csproj" ^
    	-property:Platform=AnyCPU ^
    	-property:Configuration=Development ^
    	-target:Rebuild ^
    	-verbosity:minimal ^
    	-nologo
    )
    
    REM --== Building Engine ==--
    
    "%RunUAT%" BuildGraph ^
    -Target="Make Installed Build %BuildPlatform%" ^
    -Script="%EnginePath%\Engine\Build\InstalledEngineBuild.xml" ^
    -Clean ^
    -set:GameConfigurations="%GameConfigurations%" ^
    -set:HostPlatformOnly=true ^
    -set:WithAndroid=true ^
    -set:WithLinux=true ^
    -set:WithDDC=false ^
    -set:VS2022=true ^
    -set:BuiltDirectory="%EnginePath%\Build"
  1. Build_4.27.bat не зависит от расположения движка, все пути берутся из настроек. Но его нужно модифицировать!

  2. В разделе Setup настроить пути MSBuildPath и EnginePath

  3. В разделе Building Engine удалить строчки -set:WithAndroid=true или -set:WithLinux=true если эти системы не нужны

  4. Запустить и ждать… несколько… часов…

  5. В случае успеха, результат будет в папке UE_4.27\Build\Windows

  6. Эту папку можно переместить  в другое место, а исходники удалить.

Регистрация движка

Создать REG файл, при этом поправив путь C:/AllEngines/UE_4.27_Plus на свой вариант:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Epic Games\Unreal Engine\Builds]
"4.27_Plus"="C:/AllEngines/UE_4.27_Plus"

Запустить от имени администратора. Или внести изменения при помощи regedit.

Минутка саморекламы

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

Полезные ссылки

Комментарии (8)


  1. Sazonov
    23.08.2023 13:54

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


    1. maltsevda Автор
      23.08.2023 13:54

      Одна из наших игр, до сих пор на 4.23. Просто из-за DX10 и +10 FPS на андроиде. Поэтому смена движка, не совсем простое дело.


  1. Malizia
    23.08.2023 13:54

    Работаю с UE4.27 из VS2022, проблем нет. Большое преимущество в VS2022 - она x64, нет ограничений по памяти и, как следствие, может нормально проиндексировать код. Сборку под Андроид можно делать из редактора.


    1. maltsevda Автор
      23.08.2023 13:54

      А проблем и не должно быть... Эта инструкция для тех, кому нужна свежая сборка UE 4.27, со всеми последними апдейтами. Ну или тех, кто собирается вносить свои изменения в движок, и затем бинарные версии уже раздавать внутри команды.


      1. Malizia
        23.08.2023 13:54

        У Вас весь второй абзац про проблемы с VS2022. Или речь про бинарную версию от Эпиков?


        1. maltsevda Автор
          23.08.2023 13:54

          Вы сейчас говорите про сборку игры на бинарной версии движка из лаунчера, сборку игры на базе движка из исходного кода, сборку движка в бинарный вид для последующего распространения? Если мы говорим про VS2022, то как минимум без правильно настроенных SDK последние 2 варианта могут "удивить". А без полной инструкции последний пункт вообще невозможен.

          Т.е. данная инструкция не о сборке игры, а о сборке движка и редактора. И если у вас на VS2022 сборка движка проходит без проблем... То, тогда у нас какая-то очень странная студия, можно вашу? :)


          1. Malizia
            23.08.2023 13:54

            Пожалуйста, перечитайте второй параграф Вашего поста и напишите о чем идёт речь.

            Еще одна неприятность с этой версией движка в том, что последней поддерживаемой версией IDE для него была VS 2019. Что неприятно, так как в 2022 появились плюшки для разработки под UE. А с настройками “по умолчанию” 2022-я студия, или не собирает движок совсем, или собирает его с багами. Причем, результат можно увидеть только через несколько часов томительного ожидания.


            1. maltsevda Автор
              23.08.2023 13:54

              А с настройками “по умолчанию” 2022-я студия, или не собирает движок совсем, или собирает его с багами. Причем, результат можно увидеть только через несколько часов томительного ожидания.

              Речь идет о движке. Т.е. о третьем варианте о котором я написал выше.