Поставка нативного runtime-модуля
Модуль, редактор, собственные шаблоны и настройка экспорта без скрытых зависимостей.
Vendor runtime-модуль — нативный код, встроенный в собственный шаблон экспорта Reckfell. Плагин редактора может выбрать шаблон и предоставить настройки, но его установка не добавляет нативный модуль в обычный редактор. Этот подход нужен, когда интеграция требует сборки движка; если достаточно отдельно загружаемой нативной библиотеки, рассмотрите ReckfellExtension.
Определите, что должно работать в редакторе
| Требования интеграции | Что нужно редактору и шаблонам |
|---|---|
| Только настройки и подготовка экспорта | Плагин может работать в стандартном редакторе; экспортированное приложение использует собственные шаблоны с модулем. |
| Нативные классы при предпросмотре или запуске проекта в редакторе | Модуль нужен и в редакторе либо интеграция должна предоставить отдельное совместимое расширение для редактора. Одного шаблона недостаточно. |
| Скрипт на Entity собственного нативного типа | Тип должен быть зарегистрирован там, где загружается ресурс. Проверка доступности во время выполнения не спасёт сцену или префаб с отсутствующим нативным типом. |
Создайте модуль по руководству Модули на C++. Регистрируйте типы времени выполнения на подходящем этапе вне редактора; редакторскую интеграцию ограничьте MODULE_INITIALIZATION_LEVEL_EDITOR и условиями сборки редактора. Существующий идентификатор MODULE_INITIALIZATION_LEVEL_SCENE обозначает этап инициализации, а не отдельный тип Entity или ECS.
Если в стандартном редакторе модуля нет, не используйте в редакторской части пакета жёсткие ссылки на его сгенерированные managed-типы и ресурсы собственных нативных типов. Перед использованием проверяйте реальное наличие зарегистрированного класса или singleton: версия продукта и тег экспорта не доказывают наличие нативного кода. Показывайте понятное состояние «не поддерживается», не дожидаясь ошибки загрузки ресурсов.
Соберите и упакуйте поддерживаемые варианты
Для каждой поддерживаемой платформы и архитектуры соберите target=template_debug и target=template_release с включённым модулем по соответствующему руководству по сборке. Точность чисел, требования SDK/API, поддержка C# и нативные зависимости должны соответствовать проекту и привязкам потребителей.
Приложите манифест: Reckfell 1.0.0, хеши бинарных файлов, платформа и архитектура, конфигурация debug/release, версия модуля, зависимости и лицензии. Версия пакета модуля обозначает интеграцию, а не дополнительную ревизию движка. Не подставляйте исполняемый файл настольного редактора вместо шаблона экспорта.
Для Windows x86_64 пакет может содержать два действительно собранных бинарных файла:
addons/vendor_runtime/templates/windows-x86_64-debug.exeaddons/vendor_runtime/templates/windows-x86_64-release.exe
Это пример путей в пакете, а не доступные загрузки. Перед настройкой разместите там подходящие бинарные файлы. В существующей секции параметров Windows-пресета файла export_presets.cfg задайте:
[preset.0.options]
binary_format/architecture="x86_64"
custom_template/debug="asset://addons/vendor_runtime/templates/windows-x86_64-debug.exe"
custom_template/release="asset://addons/vendor_runtime/templates/windows-x86_64-release.exe"Вместо 0 используйте настоящий индекс пресета. Добавьте записи в существующую секцию параметров: не заменяйте пресет и не создавайте повторную секцию. Два параметра выбирают разные бинарные файлы для debug- и release-экспорта. До экспорта проверьте пути и архитектуру исполняемых файлов. Исключите бинарные шаблоны из упаковываемых ресурсов игры: это входные данные сборки, а не игровой контент.
Пример относится к настольному PC-экспортёру. Не переносите пути к исполняемым файлам в мобильные и веб-пресеты: у них другой состав шаблонов и зависимостей.
Необязательная обёртка редактора
Для выбора шаблонов выше достаточно ручной настройки пресета. Если нужна обёртка, при включении плагина зарегистрируйте один экземпляр EditorExportPlugin через EditorPlugin.AddExportPlugin, при отключении удалите тот же экземпляр через RemoveExportPlugin. Задайте стабильное имя _GetName() и реализуйте _SupportsPlatform(EditorExportPlatform) для платформ, действительно включённых в пакет: нативная реализация по умолчанию возвращает false.
_GetExportOptionsOverrides(EditorExportPlatform) может вернуть словарь с custom_template/debug и custom_template/release для поддерживаемой настольной платформы. Переопределения заменяют пользовательские значения и скрывают параметры в интерфейсе, поэтому явно показывайте выбранный пакет и конфигурацию. Пресет пропускает неподдерживаемые плагины; конфликтующие переопределения нескольких плагинов вызывают предупреждение, а более поздние значения заменяют предыдущие. Не подключайте конкурирующие обёртки для одних параметров шаблона.
Используйте _ExportBegin(string[] features, bool isDebug, string path, uint flags) для подготовки экспорта с учётом платформы. Этот метод не загружает модуль в редактор и не собирает отсутствующие шаблоны. Если проекту необходим нативный функционал поставщика, не подменяйте его шаблон стандартным без сообщения об ошибке.
Проверка поставляемого пакета
| Симптом | Что проверить |
|---|---|
| В редакторе нет класса или singleton | Наличие модуля в редакторе и регистрацию типов времени выполнения вне редакторского кода. |
| Класса нет только в экспортированной игре | Выбранный собственный шаблон, ветку debug/release, архитектуру и параметр включения модуля при сборке. |
| Отсутствует путь к шаблону | Место установки пакета и оба значения custom_template/*: плагин не создаёт бинарные файлы. |
| Настройки обёртки не действуют | Включён ли плагин, зарегистрирован ли экземпляр экспортного плагина, результат _SupportsPlatform и конфликтующие переопределения. |
| Экспорт успешен, приложение не запускается | Нативные зависимости, архитектуру и совместимость модуля с привязками. Успешный экспорт не подтверждает работу приложения. |
Проверьте debug- и release-экспорт на чистой целевой машине: инициализацию интеграции, одну реальную операцию, освобождение её ресурсов и нормальное завершение. Отдельно проверьте неподдерживаемую конфигурацию. Если есть API для C#, пересоберите и проверьте привязки потребителя с поставляемым модулем: одной обёртки редактора недостаточно для их генерации.
Руководство сверено с кодом инициализации модулей, настольного экспорта и актуальными сигнатурами SDK. Пути пакета приведены как пример. При этой проверке не использовался SDK поставщика, не собирался модуль, не запускалась обёртка, готовое приложение или операция на целевом устройстве.