Простой инструмент, который позволяет отслеживать «здоровье» проекта, ловить баги на ранних этапах и точнее определять момент возникновения ошибки.Ошибки/предупреждения времени компиляции могут возникать не только во время непосредственной работы с blueprint, но и в результате внешних изменений, таких как:Изменение типа/спецификаторов доступа/метаинформации переменной/метода;Изменение сигнатуры метода;Удаление переменной/метода;Удаление файлов, на которые ссылается blueprint;И многое, многое другое.Иногда в качестве внешнего фактора выступают творческие коллеги 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.exe2.. uproject файл проекта, лежит в корне, в моем случаеC:\Games\UnrealProjects\Nice\Nice.uproject3. Терминал/командная строка/текстовый редактор — в зависимости от того, как вы будете запускать проверку.Способ 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 с логами. После завершения проверки окно любезно подождет пользовательского ввода.Способ 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А дальше все зависит только от вашей фантазии. Для рабочего проекта я остановился на следующей последовательности:Каждый коммит, затрагивающий код, запускает проверку на тестовой машине;В случае обнаружения ошибок собирается информация о файлах с дефектами, а также коммитах (номер, пользователь и комментарий), совершенных с момента предыдущей проверки;Информация отправляется в Slack с человекочитаемым форматированием;Если ошибок не найдено, но предыдущая проверка закончилась неудачей, отправляется сообщение о том, что ошибки были исправлены.Такие дела. Буду рад ответить на вопросы и обсудить трудности автоматизации в геймдеве. :)#опыт #ue4 #unrealengine #gamedev #qa #automation
Спасибо за статью! Я еще добавлю от себя хороший канал Life EXE:
https://www.youtube.com/channel/UCWlWoomx6NFIz4mzdqEcLsQ
В нем по автоматизации и тестингу тоже много полезного.
Поддерживаю! Слежу за каналом с момента основания.
У автора еще есть отличный курс на Udemy - https://www.udemy.com/course/unrealengine/
Мне очень помогло при переходе с Unity на Unreal.