Компиляция игры в Unreal Engine 5 пошагово

Как скомпилировать игру в unreal engine 5

Как скомпилировать игру в unreal engine 5

Компиляция проекта в Unreal Engine 5 (UE5) – это не просто финальный этап разработки, а критический шаг, определяющий производительность, стабильность и совместимость игры. В отличие от предыдущих версий движка, UE5 требует учета новых систем, таких как Nanite, Lumen и World Partition, которые влияют на структуру сборки. Например, при использовании Nanite необходимо убедиться, что все меши оптимизированы для виртуальной геометрии, иначе компиляция завершится с ошибками или упадет производительность на целевых платформах.

Перед началом компиляции проверьте настройки Project Settings в разделе Platforms. Для Windows-билда активируйте Shipping или Development конфигурацию в зависимости от целей: первая оптимизирует код и удаляет отладочные символы, вторая сохраняет их для тестирования. Для консолей (PlayStation, Xbox) потребуются дополнительные SDK и сертификаты, без которых компиляция завершится с ошибкой Missing Platform SDK. Убедитесь, что в Target Hardware выбрана корректная архитектура (например, x64 для ПК).

Оптимизация ресурсов – ключевой этап. Используйте Cook Content для предварительной обработки ассетов: текстуры сжимаются в форматы BC7 (для DirectX 12) или ASTC (для мобильных устройств), анимации конвертируются в ACL для уменьшения размера. В UE5 добавлена поддержка One File Per Actor (OFPA), которая разбивает уровни на отдельные файлы – это ускоряет компиляцию, но требует настройки World Partition заранее. Игнорирование этого шага приведет к увеличению времени сборки на 30–50%.

Запуск компиляции через Unreal Editor или командную строку отличается по скорости и гибкости. Для массовой сборки используйте скрипт RunUAT.bat (находится в Engine\Build\BatchFiles) с параметрами:

-project="C:\Path\To\Project.uproject" -platform=Win64 -configuration=Shipping -buildmachine

Это сокращает время на 20–40% по сравнению с ручным запуском через редактор. Для отладки ошибок компиляции проверяйте лог-файлы в Saved\Logs – там фиксируются проблемы с зависимостями модулей, отсутствующими ассетами или несовместимыми плагинами.

После успешной компиляции протестируйте билд на целевых устройствах. UE5 генерирует папку Binaries с исполняемым файлом и Content с упакованными ресурсами. Для Windows-версии проверьте работу через DirectX 12 и Vulkan, так как Lumen по умолчанию использует первый, но может переключаться на второй при нехватке видеопамяти. На консолях убедитесь, что игра запускается с частотой 60 FPS – UE5 автоматически не оптимизирует кадровый буфер для 30 FPS, если это не указано в настройках.

Подготовка проекта перед сборкой: настройка конфигураций и платформ

Подготовка проекта перед сборкой: настройка конфигураций и платформ

Откройте Project Settings (Edit → Project Settings) и перейдите в раздел Platforms. Для Windows выберите Targeted RHIs – оставьте только DirectX 12, если не требуется обратная совместимость с DX11. В Build Configuration установите Shipping для финальной сборки или Development для тестирования с отладочными символами. Для консолей (PlayStation, Xbox) убедитесь, что в Platform SDKs указаны актуальные версии SDK от производителя – например, для PS5 это PS5 SDK 9.00 или новее. Проверьте Cooking: включите By the Book для полной пересборки ассетов и отключите Skip Editor Content, если используете редакторские материалы в игре.

В разделе Project → Packaging задайте Build Configuration и укажите путь для выходных файлов в Staging Directory – используйте короткий путь без кириллицы и пробелов (например, C:\UE5_Builds\GameName). Для мобильных платформ (Android, iOS) настройте Minimum SDK Version и Target SDK Version: для Android – не ниже API 30, для iOS – iOS 15.0. Включите Full Rebuild при первом запуске сборки, чтобы избежать ошибок кэширования. Для мультиплатформенных проектов создайте отдельные Target Rules (*.Target.cs) для каждой платформы, указав в них специфичные параметры, такие как bBuildForWindows = true или bBuildForAndroid = false.

Выбор режима компиляции: Shipping, Development или Debug для разных задач

Выбор режима компиляции: Shipping, Development или Debug для разных задач

Режим компиляции определяет баланс между производительностью, отладочными возможностями и оптимизациями. Shipping – финальная сборка для релиза: включает максимальные оптимизации компилятора (LTO, инлайнинг, удаление отладочного кода), отключает логирование, профилирование и проверки безопасности (например, check(), ensure()). Используется для публикации на платформах (Steam, Epic Games Store) или тестирования на целевых устройствах. Средний прирост FPS – 15–30% по сравнению с Development, но время компиляции увеличивается на 20–40% из-за агрессивных оптимизаций. Подходит для бенчмарков и проверки стабильности на слабом железе.

Выбор между Development и Debug зависит от этапа разработки:

  • Development – стандартный режим для повседневной работы. Сохраняет отладочные символы (PDB-файлы), частично оптимизирует код (O2 вместо O3), оставляет логирование (UE_LOG) и проверки. Подходит для тестирования геймплея, профилирования в Unreal Insights и отладки через Visual Studio. Время компиляции на 10–25% меньше, чем в Shipping, но производительность ниже на 5–15%.
  • Debug – минимальные оптимизации (O0), полный набор отладочных символов и проверок. Используется для глубокой отладки (пошаговое выполнение, просмотр переменных) и исправления критических багов. Производительность падает на 30–50% относительно Development, но позволяет выявлять ошибки доступа к памяти (nullptr, выход за границы массива) через встроенные проверки движка. Не подходит для тестирования производительности или многопользовательских сессий.

Для CI/CD-конвейеров рекомендуется собирать Development для автоматических тестов и Shipping для ночных сборок. Debug оставляйте только для локальной отладки.

Оптимизация ресурсов: упаковка текстур, моделей и звуков перед сборкой

Оптимизация ресурсов: упаковка текстур, моделей и звуков перед сборкой

Unreal Engine 5 использует систему Virtual Texturing для динамической загрузки текстур, но это не отменяет необходимости их предварительной оптимизации. Начните с уменьшения разрешения текстур до минимально допустимого: для фоновых объектов хватит 1024×1024, а для деталей интерфейса – 256×256. Используйте формат BC7 для RGB-текстур и BC5 для нормалей – они обеспечивают лучший баланс качества и размера. В настройках импорта отключите Mipmaps для текстур, которые не будут видны с близкого расстояния, например, для удалённых ландшафтов.

Модели требуют особого внимания к топологии и количеству полигонов. Экспортируйте их из Blender или Maya с включённым параметром Triangulate, чтобы избежать артефактов при рендере. Для статичных объектов используйте LOD (Level of Detail): создайте 3–4 версии модели с уменьшением полигонов на 50–70% для каждого уровня. В UE5 настройте LOD Distance так, чтобы переходы происходили на расстоянии, где разница в детализации незаметна – например, 10 метров для первого LOD и 50 метров для второго.

Звуковые файлы часто упускают из виду, хотя они занимают значительный объём. Конвертируйте все аудиодорожки в Ogg Vorbis с битрейтом 128–192 кбит/с для музыки и 96–128 кбит/с для звуковых эффектов. Для коротких звуков (выстрелы, шаги) используйте WAV с частотой 22050 Гц и моно-каналом. В UE5 включите Streaming для длинных звуков, таких как фоновая музыка, чтобы они загружались по мере необходимости, а не целиком в память.

Для упаковки ресурсов используйте Unreal Pak – встроенный инструмент, который объединяет файлы в один архив с высокой степенью сжатия. В Project Settings → Packaging включите опцию Compress Pak Files и выберите алгоритм Zlib – он обеспечивает лучшее соотношение скорости распаковки и размера. Исключите из пака временные файлы и неиспользуемые ассеты, добавив их в Exclude File Types или настроив фильтры в Project Launcher.

Перед финальной сборкой запустите Cook Content с параметром By the Book – это проверит все зависимости и удалит неиспользуемые ресурсы. В логе обратите внимание на предупреждения о дубликатах текстур или моделей: они часто возникают при импорте из разных источников. Для массовой оптимизации используйте плагин Asset Actions, который автоматически уменьшает разрешение текстур и пересчитывает LOD для выбранных ассетов.

Тестируйте сборку на целевых платформах. На мобильных устройствах ограничьте максимальное разрешение текстур до 2048×2048 и используйте ASTC вместо BC7 – он эффективнее на ARM-процессорах. Для консолей проверьте использование памяти через Stat Memory и при необходимости уменьшите количество одновременно загружаемых звуков. Если игра превышает лимиты по размеру, разделите ресурсы на Primary Asset Labels и загружайте их асинхронно через Asset Manager.

После упаковки сравните размеры исходных и сжатых файлов. Хороший результат – уменьшение объёма текстур на 60–70%, моделей на 40–50%, а звуков на 30–40%. Если разница меньше, пересмотрите настройки сжатия или исключите из сборки некритичные ресурсы. Для дальнейшей оптимизации используйте Unreal Insights, чтобы выявить узкие места в загрузке и рендере, и скорректируйте параметры упаковки.

Запуск процесса компиляции через командную строку или редактор

Запуск процесса компиляции через командную строку или редактор

Unreal Engine 5 предлагает два основных способа компиляции проекта: через встроенный редактор и с помощью командной строки. Выбор метода зависит от задач – автоматизация сборки, отладка или оптимизация времени. Редактор удобен для быстрого тестирования изменений, командная строка – для интеграции в CI/CD-конвейеры или пакетной обработки.

Для запуска компиляции через редактор откройте проект в Unreal Editor, затем выберите Build > Build All или используйте горячие клавиши Ctrl+Shift+B (Windows) / Cmd+Shift+B (macOS). Редактор автоматически определит платформу и целевую конфигурацию (Development, Shipping, Debug). При этом в логе отобразятся этапы компиляции: генерация кода, линковка модулей, упаковка ресурсов.

Командная строка предоставляет больше контроля. Основной инструмент – UnrealBuildTool (UBT), расположенный в директории Engine\Binaries\DotNET\. Пример базовой команды для компиляции проекта под Windows:

Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -project="C:\Projects\MyGame\MyGame.uproject" -noP4 -platform=Win64 -clientconfig=Development -serverconfig=Development -build -cook -stage -pak -archive -archivedirectory="C:\Builds\MyGame"

Ключи команды задают параметры сборки: -platform определяет целевую платформу, -clientconfig – конфигурацию клиента, -cook включает предварительную обработку ресурсов.

Для ускорения компиляции используйте параллельную сборку. Добавьте флаг -MaxParallelActions=N, где N – количество потоков (рекомендуется N = количество ядер CPU * 1.5). Пример:

Engine\Build\BatchFiles\Build.bat MyGame Win64 Development -project="C:\Projects\MyGame\MyGame.uproject" -MaxParallelActions=12

Это сокращает время сборки на 30–50% для проектов среднего размера.

Сравнение методов компиляции
Параметр Редактор Командная строка
Скорость запуска Мгновенно (из интерфейса) Требует настройки скриптов
Поддержка CI/CD Нет Да (интеграция с Jenkins, GitHub Actions)
Логирование Графический лог в редакторе
Параметры сборки Ограничены предустановками Полный контроль через флаги

При работе с командной строкой важно учитывать зависимости. Если проект использует плагины, добавьте флаг -Plugin="Path\To\Plugin.uplugin". Для компиляции только изменённых модулей используйте -OnlyDirty, что сокращает время сборки на 70–90% при небольших правках. Пример:

Engine\Build\BatchFiles\Build.bat MyGame Win64 Development -project="C:\Projects\MyGame\MyGame.uproject" -OnlyDirty

Для автоматизации сборок создайте BAT- или PowerShell-скрипт. Пример скрипта для ежедневной сборки под Windows и Linux:

@echo off
set PROJECT_PATH=C:\Projects\MyGame\MyGame.uproject
set BUILD_DIR=C:\Builds\MyGame
:: Windows
Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -project="%PROJECT_PATH%" -platform=Win64 -clientconfig=Shipping -build -cook -stage -pak -archive -archivedirectory="%BUILD_DIR%\Win64"
:: Linux
Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -project="%PROJECT_PATH%" -platform=Linux -clientconfig=Shipping -build -cook -stage -pak -archive -archivedirectory="%BUILD_DIR%\Linux"

Скрипты можно запускать по расписанию через планировщик задач Windows или cron в Linux.

Анализ логов сборки: поиск и исправление ошибок компиляции

Анализ логов сборки: поиск и исправление ошибок компиляции

Типичные ошибки компиляции делятся на три категории: синтаксические, зависимости и ресурсные. Синтаксические ошибки (C++ compilation failed) требуют проверки файлов .cpp и .h на несоответствие API движка – например, использование устаревших макросов (UFUNCTION(BlueprintCallable, Category="Deprecated")) или неверных типов данных. Ошибки зависимостей (Missing module) возникают при отсутствии подключенных плагинов или библиотек; проверьте секцию PublicDependencyModuleNames в [ProjectName].Build.cs. Ресурсные ошибки (Failed to compile material) связаны с некорректными шейдерами или текстурами – ищите ссылки на отсутствующие ассеты в Content/.

Для диагностики ошибок шейдеров используйте ShaderCompileWorker с флагом -debug. Запустите его вручную через командную строку: Engine/Binaries/Win64/ShaderCompileWorker.exe -debug -log="ShaderDebug.log". Это создаст подробный лог с указанием конкретных строк кода в HLSL, где произошел сбой. Частые причины: неверные параметры в MaterialExpression, отсутствие текстурных координат в меше или несовместимость с выбранным графическим API (например, DirectX 12 vs Vulkan). В UE5 добавьте в DefaultEngine.ini строку r.ShaderDevelopmentMode=1 для включения расширенного логирования.

Ошибки линковки (LINK : fatal error LNK1181) возникают при неверных путях к библиотекам или конфликтах версий. Проверьте переменные окружения PATH и UE_ThirdPartyDir, а также соответствие версий компилятора (например, Visual Studio 2022 для UE5.3+). Если ошибка указывает на отсутствие .lib-файла, пересоберите зависимости через GenerateProjectFiles.bat и убедитесь, что в PublicAdditionalLibraries прописаны корректные пути. Для проектов с C++-плагинами добавьте в Target.cs строку bUseUnity = false, чтобы избежать конфликтов при сборке.

Вопрос-ответ:

Ссылка на основную публикацию