Во время разработки на Unreal Engine могут возникнуть задачи, которые требуют автоматизации, повторяемых действий или пакетной обработки. Эти задачи могут варьироваться от компиляции Blueprint'ов до упаковки игры на удаленном сервере. В таких случаях на помощь приходят Commandlet'ы.

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

Что Такое Commandlet?

Commandlet — это специализированный класс в UE, предназначенный для выполнения определённых задач в автоматизированном режиме. Командлеты выполняются в «сырой» среде, в которой не загружается игра, не загружается клиентский код, не загружаются уровни и не существуют актеры, что делает их быстрыми и удобными для сценариев автоматизации. Commandlet'ы могут быть использованы для выполнения различных задач, таких как:

  • Компиляция всех Blueprint'ов в проекте.

  • Подготовка (готовка) контента для конкретной платформы.

  • Проверка целостности активов (assets) и исправление ошибок.

  • Генерация пакетов и патчей.

  • Запуск автоматических тестов.

Зачем использовать Commandlet?

Командлеты становятся особенно полезными, когда вам нужно:

  • Автоматизация: Commandlet'ы позволяют автоматизировать рутинные задачи, такие как готовка ресурсов (ассетов) к запаковке, компиляция и их пересохранение. Например, вы можете создать сценарий, который ежедневно запускает Commandlet для проверки целостности вашего проекта.

  • Пакетная обработка: С помощью Commandlet'ов можно обработать большой объём данных за один проход. Например, вы можете использовать команду для пересохранения всех пакетов вашего проекта после обновления движка.

  • Скриптинг: Commandlet'ы отлично интегрируются с системами сборки и тестирования, такими как Jenkins или другие CI/CD инструменты. Вы можете легко написать скрипт, который запускает несколько командлетов подряд, обеспечивая автоматическую сборку проекта, тестирование и упаковку.

  • Экономия ресурсов: Так как Commandlet'ы запускаются без загрузки полного пользовательского интерфейса Unreal Editor, они потребляют меньше ресурсов, что делает их идеальными для серверов и скриптовых задач.

Как Работают Commandlet?

Commandlet'ы запускаются из командной строки операционной системы с помощью UnrealEditor.exe. Общий синтаксис запуска Commandlet выглядит так:

UnrealEditor.exe [Path to .uproject] -run=[CommandletName] [Additional Parameters]

Важное уточнение: для читаемого запуска рекомендуется использовать UnrealEditor-Cmd.exe, а не UnrealEditor.exe, поскольку так вы сможете увидеть лог выполнения команды и окошко консоли не закроется после выполнения

Важное уточнение 2: в Windows нужно будет предварительно перейти в коммандой строке в папку с UnrealEditor.exe если у вас 5я версия UE или в папку с UE4Editor для 4й версии.

Для вывода результата выполнения Commandlet в лог-файл, можно использовать 2 аргумента:

-stdout 

или

-log=Test.log

Лог будет сохранен в

/saved/logs

папке в вашего проекта

Основные встроенные командлеты в Unreal Engine 5

  • CompileAllBlueprints

Компилирует все Blueprint'ы в проекте.

  • CookCommandlet

Подготавливает все ресурсы для конкретной платформы.

  • GenerateDistillFileSets

Используется для генерации набора файлов для дистилляции данных, как указали эпики в комментарии в .h: "Find AnimNotify instances that do not have the AnimSeqeunce that 'owns' them as their outer.". Могу предположить, что эта командлета используется для отсортировки используемых и не используемых классов в игре.

  • GeneratePatchScript

Создаёт сценарий для создания патча.

  • ListMaterialsUsedWithMeshEmitters

Перечисляет материалы, используемые со статик мешами.

  • ListStaticMeshes

Перечисляет все статик меши, используемые в проекте.

  • LoadPackage

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

  • ResavePackages

Пересохраняет ассеты.

  • FixupRedirects

Исправляет сломанные референсные ссылки ассетов друг на друга в проектах, возникшие при переименовании или перемещении ресурсов.

  • DumpBlueprintsInfo

Выводит информацию о всех существующих Blueprint'ах в проекте.

  • GlobalShaderCacheCommandlet

Компилирует и обновляет кеш глобальных шейдеров.

  • MergeShaderCaches

Объединяет кеши шейдеров для использования в проекте.

  • PakFileCommandlet

Создаёт архив .pak из содержимого проекта.

  • PluginCommandlet

Работает с плагинами, проверяя их или создавая из них сборку.

  • ScreenshotComparisonCommandlet

Используется для сравнения скриншотов, например, при тестировании рендеринга.

  • StatsDumpMemoryCommandlet

Выгружает статистику использования памяти.

  • TestPAL

Запускает тесты PAL (Platform Abstraction Layer) для платформы.

  • UnrealEdTest

Запускает тесты редактора Unreal Engine.

  • ValidateAssetsCommandlet

Проверяет корректность загрузки ассетов в проекте.

  • CookOnTheFlyServer

Запускает сервер для готовки ресурсов "на лету" (в реальном времени). Полный список коммандлетов можно найти в исходниках движка. Даже если вы установили движок через Epic Games, а не собирали из исходников, их можно найти в папке

Engine\Source\

Дополнительные примечания

Помимо командлет в UE есть так же большой список полезных консольных команд, которыми многие пользуются во время разработки в редакторе вроде stat unitgraph или show fps, но и их тоже можно выполнять в автоматическом режиме через cmd; Синтаксис там немного другой:

параметр к UnrealEditor-Cmd.exe

-ExecCmds="Команда1, Команда2...."

Чтобы запустить при этом движок без интерфейса, можно воспользоваться командой

-nullrhi 

Полностью отключает рендеринг или

-nogui

Отключает интерфейс, но позволяет выполнять команды через командную строку Порядок вызова следующий:

UnrealEditor-Cmd.exe ПутьИНазвание.uproject -nogui -ExecCmds=""
UnrealEditor-Cmd.exe ПутьИНазвание.uproject -ExecCmds="" -nullrhi 

Дополнительные ссылки на документацию, на случай если читатель захочет подробнее разобраться в вопросе (хоть документация у Epic Games по данному вопросу довольно скудная и большая часть полезной информации содержится в комментариях к исходному коду движка).

Ссылки

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