Профили возможностей редактора
Скрытие инструментов, наследование ограничений и перенос .profile.
Профиль возможностей упрощает интерфейс редактора: скрывает рабочие области, классы при создании Entity и отдельные свойства. Он не удаляет классы из движка, не уменьшает экспорт и не ограничивает доступ скриптов к данным. Используйте профиль, например, для 2D-художника, которому не нужны 3D-инструменты.
Это локальная настройка редактора. Чтобы передать её коллеге, экспортируйте .profile; сохранение сцены само по себе профиль не переносит.
Создайте и примените профиль
Названия ниже приведены для английского интерфейса Reckfell 1.0.0.
- Откройте Editor → Manage Editor Features…. Появится окно Manage Editor Feature Profiles.
- Нажмите Create Profile, задайте имя, например
layout-2d. - В Main Features снимите флажок 3D Editor. Это скрывает рабочую область 3D; классы Entity3D сами по себе ещё не исключены из списка создания.
- Если 3D-классы также не нужны в списке создания, снимите флажок у Entity3D в дереве классов. Запрет затронет его native-наследников, включая
MeshInstance3D. - Нажмите Make Current. Проверьте имя в Current Profile: выбор профиля для редактирования и его применение — разные действия.
- Чтобы вернуть полный интерфейс, нажмите Reset to Default. Это отключает текущий профиль; не нужно удалять сцены, переустанавливать движок или вручную восстанавливать каждое поле.
Редактирование текущего профиля сохраняет изменения и запускает обновление интерфейса с небольшой задержкой. Для другого профиля изменения остаются подготовкой до Make Current.
Выберите нужный уровень ограничения
| Настройка | Что меняет |
|---|---|
| 3D Editor | Рабочую область 3D. Не равнозначно запрету классов Entity3D. |
| Класс в дереве | Доступность класса и native-наследников в инструментах редактора; старые данные не удаляются. |
| Enable Contextual Editor у класса | Доступность связанного специализированного редактора. Не обещает read-only для всех полей Inspector. |
| Свойства класса | Видимость отдельных свойств в Inspector. Значение свойства и доступ из кода сохраняются. |
| Scene Tree Editing | Возможность редактировать иерархию; сама панель дерева остаётся. |
Не используйте профиль как систему прав или защиту исходников: пользователь может отключить его, открыть файл другим инструментом или изменить данные кодом. Для уменьшения размера/нагрузки проекта нужны настройки экспорта и оптимизация содержимого, а не скрытие панелей.
Наследование: почему поле или класс всё ещё скрыты
Запрет native-класса действует на потомков. Если отключена Entity3D, включение одной MeshInstance3D не отменяет запрет родителя. Сначала включите родителя. Аналогично наследуется ограничение контекстного редактора класса.
Свойства в API устроены иначе: IsClassPropertyDisabled("CanvasItem", "modulate") читает точную запись. Тот же запрос для Sprite2D вернёт false, если запись сделана только для CanvasItem. Inspector сам обходит родителей, поэтому у Sprite2D поле всё равно может быть скрыто. Не делайте вывод о видимости поля по одному запросу для дочернего класса.
Для API используйте native-имя свойства modulate, а не C#-обёртку Modulate или переведённую подпись. Ограничения классов здесь основаны на native-иерархии ClassDB; не считайте их произвольной системой правил для всех ваших C#-типов.
Передайте профиль коллеге
- Выберите нужный профиль и нажмите Export. Сохраните
layout-2d.profile. - На другом компьютере откройте то же окно и нажмите Import.
- Выберите импортированный профиль и нажмите Make Current.
- Если интерфейс стал слишком ограниченным, используйте Reset to Default.
.profile — JSON с маркером "type": "feature_profile", а не обычный ресурс .rdata. Храните экспортированный файл в репозитории команды, если он должен быть общим; личные активные настройки редактора при этом не становятся настройками проекта.
Создайте файл из C#-инструмента
Следующий вспомогательный класс предназначен для C#-кода редактора. Write2D() записывает профиль с отключёнными рабочей областью 3D и веткой Entity3D. TryRead() возвращает новый объект данных, но не активирует его в запущенном редакторе. Для применения файла используйте Import и Make Current.
using Reckfell;
public static class FeatureProfileFiles
{
public static Error Write2D(string path)
{
using var profile = new EditorFeatureProfile();
profile.SetDisableFeature(EditorFeatureProfile.Feature.Feature3D, true);
profile.SetDisableClass("Entity3D", true);
return profile.SaveToFile(path);
}
// Reads profile data; this does not activate it in the running editor.
// The caller owns the returned instance and must dispose it when finished.
public static bool TryRead(string path, out EditorFeatureProfile? profile, out Error error)
{
var candidate = new EditorFeatureProfile();
error = candidate.LoadFromFile(path);
if (error == Error.Ok)
{
profile = candidate;
return true;
}
candidate.Dispose();
profile = null;
return false;
}
}Передайте существующий доступный для записи каталог и имя .profile. Проверьте Error от Write2D(); после успешного TryRead() освободите возвращённый экземпляр, когда закончите его читать. Сам профиль не является EditorPlugin и не требует plugin.cfg.
Почему загрузка идёт в новый объект: в 1.0.0 LoadFromFile() не гарантирует полный сброс старого состояния. Если в допустимом JSON нет disabled_features, прежние флаги возможностей сохраняются, хотя записи классов очищаются. Обычный SaveToFile() записывает эту секцию, но для сторонних или сокращённых файлов безопаснее читать в свежий экземпляр. Ошибка загрузки также не является обещанием транзакционного отката всех полей.
Диагностика
| Проблема | Решение |
|---|---|
| Профиль выбран, интерфейс не изменился | Проверьте Current Profile и нажмите Make Current. |
| 3D-классы остались после отключения 3D Editor | Отдельно отключите ветку Entity3D, если нужно убрать классы при создании. |
| Включённый дочерний класс всё ещё недоступен | Проверьте запрет родительского native-класса. |
| Не находится поле Inspector | Проверьте текущий профиль, запрет класса и свойств его родителей. Для быстрого сравнения используйте Reset to Default. |
| Профиль «не уменьшил игру» | Он меняет интерфейс, а не содержимое или сборку игры. |
| Файл не импортируется | Нужен экспорт .profile с правильным JSON-маркером; переименование произвольного .rdata не преобразует его в профиль. |
Границы проверки
В установленном headless-редакторе 1.0.0 проверены независимые флаги, native-наследование запретов классов/редакторов, точные ключи свойств, сохранение/загрузка всех типов правил в JSON и нюанс повторной загрузки неполного файла. Активный профиль пользователя не менялся. Клики в менеджере, экранная видимость панелей, read-only-состояния, ошибки повреждённых файлов/записи, экспорт игры и другие платформы этим тестом не подтверждены; порядок действий и потребители правил дополнительно сверены с исходниками редактора.