C# в редакторе: Tool и жизненный цикл
Отделить редакторский контекст и очищать собственные регистрации.
[Tool] разрешает C#-скрипту выполняться при редактировании. Это не кнопка запуска игровой сцены и не регистрация плагина: для EditorPlugin по-прежнему нужны конфигурация и включение.
Разделяйте контексты
Engine.IsEditorHint() показывает редакторский контекст. Для общего скрипта отделяйте редакторское предварительное отображение от игровой логики. Не используйте EditorInterface из обычного запуска игры как будто там открыт редактор.
Полный [Tool]-пример: SceneAuditPlugin. Его _EnterTree() создаёт собственную панель и меню; _ExitTree() снимает регистрацию, отписывает кнопку и освобождает панель. Тестовый запуск подтвердил Engine.IsEditorHint()==true в настоящем редакторе.
Если нужны обработчики в других классах, учитывайте контекст и доступность объектов. Не запускайте игровой сетевой клиент, запись микрофона или изменение файлов просто из конструктора tool-класса: скрипт может создаваться при сканировании и загрузке редактора.
Жизненный цикл
Повторное включение создаёт новый экземпляр EditorPlugin. Инициализацию размещайте при входе, симметричную очистку — при выходе. Сохранённая C#-ссылка не удерживает освобождённую нативную Entity; после QueueFree не продолжайте использовать панель как действующий объект.
Не удаляйте чужие панели или корень редактируемой сцены ради очистки плагина. RemoveDock() снимает регистрацию, но удаление своего объекта выполняется отдельно. Очистка должна работать даже после частично завершённой настройки.
Изменение содержимого проекта
Пример только читает текущую иерархию. Для инструмента, который меняет свойства, создаёт или удаляет Entity, нужны редактируемая цель, UndoRedo и корректный Owner сохраняемых объектов. Прямое присваивание свойства не становится автоматически полноценной отменяемой командой редактора.
EditorScript._Run() предназначен для отдельной запускаемой операции; это не замена _EnterTree() и _ExitTree() постоянного плагина. Его запуск не проверялся данным набором.
Проверены tool-контекст EditorPlugin, включение/выключение, callbacks и очистка в отдельном проекте. Выполнение игровых ветвей, EditorScript, отменяемое изменение сцен и экспорт не проверялись.