Расширение движка: выбор API
Когда достаточно C#, когда нужен плагин, нативная библиотека или модуль.
Выбирайте способ расширения по задаче и доступному API. Наличие C++ исходников не означает, что для каждой функции нужно собирать собственный движок.
| Задача | С чего начать | Что потребуется |
|---|---|---|
| Игровая логика, собственные компоненты и данные | C# Entity/Resource | Сборка C# проекта и доступный управляемый SDK |
| Собственный формат данных | ResourceFormatLoader/ResourceFormatSaver | Callbacks формата и регистрация обработчиков |
| Синтез или очередь PCM | AudioStreamGenerator | Согласованные частоты, заполнение буфера и контроль пропусков |
| Инструмент редактора | EditorPlugin, при необходимости EditorImportPlugin | Редакторский жизненный цикл и очистка регистраций |
| Нативная библиотека через доступный ABI | ReckfellExtension | Библиотека под каждую ОС/архитектуру и подходящие интерфейсы |
| Изменение внутренних систем, недоступных через API | Модуль C++ или изменение Source | Сборка движка и нужных экспортных шаблонов |
| Новый платформенный backend | Порт платформы | Интеграция окна, ввода, рендера, аудио и сборки под целевую систему |
Начните с проверяемого результата
- Найдите нужный тип и метод в справочнике SDK. Не считайте, что внутренний метод C++ автоматически доступен в C# или ABI расширений.
- Сделайте один рабочий сценарий: создать объект, вызвать функцию, получить результат, освободить свои ресурсы.
- Определите владельца регистраций и подписок. При выключении плагина или завершении сервиса снимите их; освобождение обёртки само по себе не заменяет снятие регистрации.
- Если код должен работать у игрока, проверьте его в экспортированной игре. Успешный запуск редактора не подтверждает наличие нативной библиотеки, зависимостей или пользовательских файлов в экспорте.
Рабочие примеры: собственный формат ресурсов, потоковое аудио. Для инструментов редактора начните с EditorPlugin и EditorImportPlugin.
Где действительно нужна нативная сборка
ReckfellExtension загружает отдельную нативную библиотеку по описанию .reckfellextension. Выбор библиотеки зависит от признаков целевой платформы и архитектуры; один файл библиотеки не переносится автоматически на все системы. Доступ ограничен интерфейсом расширений: приватные классы и произвольные внутренние функции Source не становятся доступными только из-за использования C++.
Модуль C++ входит в сборку движка. Его регистрация разделена на уровни инициализации Core, Servers, Scene и Editor. Код уровня Editor не следует считать доступным в игре. Изменение модуля требует новой сборки соответствующих исполняемых файлов; для распространения игры нужны согласованные шаблоны целевых платформ.
Ни расширение, ни модуль не гарантируют выигрыш производительности сами по себе. Сначала измерьте сценарий: вычисления, переходы между API, копирование данных, ожидание или GPU. Перенос маленьких вызовов через границу языков может не устранить реальную причину задержки.
Дальше: нативные расширения, модули C++, порты платформ.