Иконки редактора: SVG, импорт и палитра
Иконки плагина и ядра: подключение, масштаб, цвет и диагностика.
Иконки редактора
Сначала выберите способ подключения. Иконка панели плагина и встроенная иконка класса попадают в редактор разными путями.
| Задача | Решение |
|---|---|
| Стандартная иконка на кнопке плагина | Возьмите её через EditorInterface.Singleton.GetEditorTheme() из типа EditorIcons; сначала проверьте HasIcon. Рабочий пример. |
| Собственный SVG в проекте или плагине | Положите файл в проект, настройте импорт и используйте как Texture2D. Пересборка движка не нужна. |
| Встроенная иконка нового C++-класса | Добавьте SVG в исходники редактора или модуля и соберите отдельный редактор. Импорт файла в проект не регистрирует встроенную иконку. |
Подготовить SVG
Для обычной иконки панели используйте холст 16×16, прозрачный фон и простую читаемую форму. Это размер дизайна, а не запрет на большие изображения: миниатюры и другие специальные иконки могут иметь другой размер.
Привязывайте прямые границы к пиксельной сетке и проверяйте результат в масштабе 1×. Не уменьшайте сложную иллюстрацию до 16 пикселей. Переведите текст в контуры; не полагайтесь на шрифт, установленный только у автора.
Сохраните следующий файл как asset://addons/my_tool/icons/CreateItem.svg:
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill="#e0e0e0" d="M7 2h2v5h5v2H9v5H7V9H2V7h5z"/>
</svg>Цвет #e0e0e0 входит в палитру редактора. Текущая таблица преобразования для светлой темы заменяет его на #5a5a5a; белый #ffffff — на #414141. Это соответствия из Source/editor/themes/editor_color_map.cpp, а не автоматическое исправление контраста любого SVG. Произвольный цвет может остаться без изменения. Для фирменной графики не включайте преобразование вслепую.
Импортировать иконку плагина
- Выберите SVG в браузере ресурсов проекта и откройте панель импорта.
- Для иконки инструмента включите Editor → Scale with Editor Scale. Точный ключ настройки —
editor/scale_with_editor_scale. - Если иконка использует палитру редактора, включите Editor → Convert Colors with Editor Theme:
editor/convert_colors_with_editor_theme. - Нажмите Reimport. Для SVG также доступен базовый множитель
svg/scale; обычно оставьте 1.0, чтобы не увеличить иконку дважды. - Назначьте импортированную Texture2D свойству Icon своей кнопки или используйте её в другом контроле плагина. Жизненный цикл панели описывает создание и удаление контролов.
Эти параметры создают отдельный вариант текстуры для редактора; исходное изображение игры не становится глобально перекрашенной темой. Для обычной графики игры оставляйте настройки редактора выключенными. Если опций нет, проверьте, что выбран SVG, а не PNG или уже импортированный ресурс.
Добавить встроенную иконку
Этот путь нужен при разработке ядра. В текущем дереве исходников общие иконки лежат в Source/editor/icons/. Имя SVG без расширения становится ключом в теме: для класса используйте его точное имя и регистр. Не добавляйте второй файл с тем же именем из другого модуля.
editor/icons/SCsub собирает SVG из общей папки и путей модулей; editor_icons_builders.py формирует editor/themes/editor_icons.gen.h. Не редактируйте сгенерированный заголовок вручную. Модуль может предоставить папку через get_icons_path() в своём config.py; пример реализации есть в modules/voxel/config.py.
После изменения соберите отдельный target=editor по руководству сборки. SVG из исходников не появится в уже установленном бинарном файле только после Reimport проекта. Сохраните исходный SVG до оптимизации: оптимизатор может удалить вспомогательные данные редактора изображений.
Если результат неправильный
| Симптом | Что проверить |
|---|---|
| Иконка отсутствует | Путь, регистр имени, результат импорта; для встроенной иконки — какой бинарный файл запущен и доступна ли поддержка SVG в сборке. |
| Тёмная иконка теряется на светлой теме | Палитру и опцию преобразования; для кнопки также состояния disabled, hover и фокуса. |
| Размер слишком большой | svg/scale, масштаб редактора, минимальный размер контрола и отсутствие дополнительного ручного умножения. |
| Размытые линии при 1× | Геометрию на пиксельной сетке и сложность рисунка; увеличение PNG не восстанавливает векторные границы. |
Опубликованный SVG проверен установленным движком: загрузка, растеризация 16×16 и 32×32, прозрачность, цвет и явная замена палитры через DPITexture. Ручная настройка импорта, смена темы/DPI и интеграция новой иконки в C++-сборку в этом прогоне не выполнялись. Это пример ресурса, а не скриншот интерфейса.