Unreal Engine — компиляция всех Blueprints в проекте. Как, а главное — зачем

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

Ошибки/предупреждения времени компиляции могут возникать не только во время непосредственной работы с blueprint, но и в результате внешних изменений, таких как:

  • Изменение типа/спецификаторов доступа/метаинформации переменной/метода;
  • Изменение сигнатуры метода;
  • Удаление переменной/метода;
  • Удаление файлов, на которые ссылается blueprint;
  • И многое, многое другое.
Иногда в качестве внешнего фактора выступают творческие коллеги https://blueprintsfromhell.tumblr.com/image/182038609701
Иногда в качестве внешнего фактора выступают творческие коллеги https://blueprintsfromhell.tumblr.com/image/182038609701

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

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

CompileAllBlueprints

Дисклеймер:
Я буду указывать полные пути до файлов так, как они расположены у меня в системе.
Не забывайте менять на подходящие в вашем случае. :)

Для запуска понадобятся:

1. UE4Editor-Cmd.exe, найти можно по адресу

C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64\UE4Editor-Cmd.exe

2.. uproject файл проекта, лежит в корне, в моем случае

C:\Games\UnrealProjects\Nice\Nice.uproject

3. Терминал/командная строка/текстовый редактор — в зависимости от того, как вы будете запускать проверку.

Способ 1 — запуск из командной строки

Здесь все просто — открываем любимый терминал и вызываем

"C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64\UE4Editor-Cmd.exe" "C:\Games\UnrealProjects\Nice\Nice.uproject" -run=CompileAllBlueprints -ShowResultsOnly

По экрану поползут логи компиляции. В зависимости от размера проекта процесс может занимать от десятка секунд до нескольких минут.

Если все хорошо, ближе к концу простыни лога появится воодушевляющее сообщение

[2021.12.21-16.16.11:221][ 0]LogCompileAllBlueprintsCommandlet: Display: =================================================================================== Compiling Completed with 0 errors and 0 warnings and 0 blueprints that failed to load. ===================================================================================

В противном случае программа подскажет не только файлы с ошибками, но и сами ошибки (в данном случае я создал bool переменную, использовал ее в branch ноде, после чего переменную удалил из variables, но оставил в редакторе):

[2021.12.21-16.16.47:187][ 0]LogCompileAllBlueprintsCommandlet: Display: =================================================================================== Compiling Completed with 1 errors and 0 warnings and 0 blueprints that failed to load. =================================================================================== [2021.12.21-16.16.47:189][ 0]LogInit: Display: [2021.12.21-16.16.47:190][ 0]LogInit: Display: Warning/Error Summary (Unique only) [2021.12.21-16.16.47:190][ 0]LogInit: Display: ----------------------------------- [2021.12.21-16.16.47:190][ 0]LogInit: Display: LogBlueprint: Error: [AssetLog] C:\Games\UnrealProjects\Nice\Content\Blueprints\StatusEffects\BP_NiceStatusEffect_Strength.uasset: [Compiler] In use pin Test Bool no longer exists on node Get . Please refresh node or break links to remove pin. from Source: /Game/Blueprints/StatusEffects/BP_NiceStatusEffect_Strength.BP_NiceStatusEffect_Strength

Способ 2 —. bat

Каждый раз запускать консоль, вспоминать/вводить/копировать длинные пути до нужных файлов — то еще удовольствие. Намного проще один раз задать все в скрипте и запускать проверку двойным кликом по файлу.

Поэтому в корне проекта я создал compileBP.bat с таким содержанием (на самом деле не совсем, но это детали):

@echo off set UE4EDITORCMD_EXE=C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64\UE4Editor-Cmd.exe set UPROJECT_PATH=C:\Games\UnrealProjects\Nice\Nice.uproject call "%UE4EDITORCMD_EXE%" "%UPROJECT_PATH%" -run=CompileAllBlueprints -ShowResultsOnly pause

Его запуск открывает окно cmd.exe с логами. После завершения проверки окно любезно подождет пользовательского ввода.

Unreal Engine — компиляция всех Blueprints в проекте. Как, а главное — зачем

Способ 3 — парсинг файла логов

Можно заметить, что полезной информации в логах едва наберется на 5 строчек, так зачем любоваться на все остальное, когда машина может отфильтровать нужное?

Для удобства и облегчения автоматизации процесса можно задать имя файла, в который будет сохраняться лог исполнения. Для этого достаточно к основной команде добавить аргумент -log=BPCompileLog.txt (имя файла можете заменить по вкусу).

@echo off set UE4EDITORCMD_EXE=C:\Program Files\Epic Games\UE_4.26\Engine\Binaries\Win64\UE4Editor-Cmd.exe set UPROJECT_PATH=C:\Games\UnrealProjects\Nice\Nice.uproject call "%UE4EDITORCMD_EXE%" "%UPROJECT_PATH%" -run=CompileAllBlueprints -ShowResultsOnly -log=BPCompileLog.txt

А дальше все зависит только от вашей фантазии. Для рабочего проекта я остановился на следующей последовательности:

  1. Каждый коммит, затрагивающий код, запускает проверку на тестовой машине;
  2. В случае обнаружения ошибок собирается информация о файлах с дефектами, а также коммитах (номер, пользователь и комментарий), совершенных с момента предыдущей проверки;
  3. Информация отправляется в Slack с человекочитаемым форматированием;
  4. Если ошибок не найдено, но предыдущая проверка закончилась неудачей, отправляется сообщение о том, что ошибки были исправлены.
Unreal Engine — компиляция всех Blueprints в проекте. Как, а главное — зачем

Такие дела. Буду рад ответить на вопросы и обсудить трудности автоматизации в геймдеве. :)

6767
3 комментария

Спасибо за статью! Я еще добавлю от себя хороший канал Life EXE:
https://www.youtube.com/channel/UCWlWoomx6NFIz4mzdqEcLsQ
В нем по автоматизации и тестингу тоже много полезного.

4
Ответить

Поддерживаю! Слежу за каналом с момента основания.
У автора еще есть отличный курс на Udemy - https://www.udemy.com/course/unrealengine/
Мне очень помогло при переходе с Unity на Unreal.

5
Ответить