Архитектура редактора и безопасная итерация
Актуальные исходники, границы EditorInterface и отдельная тестовая среда.
Архитектура редактора
Редактор использует UI-контролы и рендеринг движка. Для расширения проекта работайте через EditorPlugin и EditorInterface; исходники C++ нужны, когда меняется встроенная реализация. Редактор не является обычным пользовательским .rscene-проектом, который достаточно открыть и пересохранить.
Где искать код
Пути ниже относительны корню Source текущего дерева:
| Путь | Ответственность |
|---|---|
editor/editor_node.cpp | Сборка основного интерфейса и координация редактора. Имя C++-класса EditorNode — реальный внутренний идентификатор. |
editor/editor_interface.cpp | Публичный мост к возможностям редактора, доступный также C#-инструментам. |
editor/plugins/editor_plugin.cpp | Регистрация расширений и их контролов. |
editor/docks/ | Панели и инфраструктура доков, включая EditorDock. |
editor/project_manager/project_manager.cpp | Отдельный интерфейс менеджера проектов. |
editor/scene/canvas_item_editor_plugin.cpp | Основной 2D-редактор. |
editor/scene/3d/entity_3d_editor_plugin.cpp | Основной 3D-редактор. |
editor/scene/3d/gizmos/ | Специализированные 3D-гизмо. |
editor/themes/ | Генерация темы, шрифты, иконки и варианты оформления. |
modules/ | Дополнительные возможности; у модулей может быть собственная редакторская часть. |
Не все функции находятся в одном editor-файле. Например, Control и ресурс Theme реализованы в общих scene/gui/ и scene/resources/, а серверы ниже обслуживают и редактор, и игру.
Граница публичного API
EditorInterface даёт корневой Control, текущий редактируемый уровень, тему и другие документированные возможности. Это не обещание стабильности внутренней структуры каждого дочернего контрола.
Для панелей используйте EditorDock; для инспектора — EditorInspectorPlugin. Не копируйте всю встроенную панель ради одной команды и не связывайте плагин с локализованной подписью чужой кнопки. Внутренний обработчик допустим в узкой проверке реализации, но не становится от этого контрактом стороннего инструмента.
Изменение ядра редактора
- Воспроизведите проблему в маленьком проекте и определите конкретный контрол, плагин или ресурс.
- Найдите обработчик и его зависимости. Для нового кода сохраняйте направление зависимостей
editor → scene → servers → core; существующее обратное включение не используйте как образец для нового слоя. - Выберите, меняется ли только редактор или также поведение игры. Изменение общего Control может затронуть оба случая; тест редакторской панели не покрывает интерфейс экспортированной игры.
- Соберите отдельный
target=editorпо инструкции сборки. При C# учитывайте управляемый комплект. - Откройте отдельный тестовый проект новым бинарным файлом. Сравните воспроизведение, включение/выключение инструмента, сохранение/открытие уровня и отмену изменений.
Этот раздел не требует автоматически менять ядро. Если задача решается плагином, проверяйте его в проекте без подмены рабочего движка. Сборка C++-редактора для этой статьи не выполнялась; карта файлов сверена с текущими исходниками.