Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

SettingsProvider

класс в UnityEditor

Описание

SettingsProvider — класс конфигурации, задающий, как настройка проекта или параметр должны отображаться в окне Settings или Preferences.

Чтобы добавить новые страницы настроек проекта или параметров, объявите SettingsProvider. Класс SettingsProvider даёт точки подключения для отображения любого интерфейса (отрисованного через IMGUI или UIElements). Он также предоставляет API, позволяющий задать ключевые слова, которые используются в окнах Settings и Preferences двумя способами:

1) Поисковая строка фильтрует SettingsProviders, которые не имеют соответствующих ключевых слов.

2) Метки свойств выделены соответствующими ключевыми словами.

В этом примере показано, как настроить SettingsProvider с IMGUI:

using UnityEditor;
using UnityEngine;

class MyCustomSettings : ScriptableObject { const string AssetPath = "Assets/Editor/MyCustomSettings.asset";

[SerializeField] int m_Number = 42; [SerializeField] string m_SomeString = "The answer to the universe";

internal static MyCustomSettings GetOrCreate() { MyCustomSettings settings = AssetDatabase.LoadAssetAtPath<MyCustomSettings>(AssetPath); if (settings == null) { settings = CreateInstance<MyCustomSettings>(); AssetDatabase.CreateAsset(settings, AssetPath); AssetDatabase.SaveAssets(); } return settings; }

internal static SerializedObject GetSO() => new SerializedObject(GetOrCreate()); }

static class MyCustomSettingsIMGUI { [SettingsProvider] public static SettingsProvider CreateProvider() { return new SettingsProvider("Project/My Custom Settings", SettingsScope.Project) { label = "My Custom", guiHandler = _ => { SerializedObject serializedObject = MyCustomSettings.GetSO(); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_Number"), new GUIContent("My Number")); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_SomeString"), new GUIContent("My String")); serializedObject.ApplyModifiedPropertiesWithoutUndo(); }, keywords = new System.Collections.Generic.HashSet<string>(new[] { "Number", "String" }) }; } }

В этом примере показано, как настроить SettingsProvider с UIElements:

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor.UIElements;

class MyCustomSettings : ScriptableObject { const string AssetPath = "Assets/Editor/MyCustomSettings.asset";

[SerializeField] int m_Number = 42; [SerializeField] string m_SomeString = "The answer to the universe";

internal static MyCustomSettings GetOrCreate() { MyCustomSettings settings = AssetDatabase.LoadAssetAtPath<MyCustomSettings>(AssetPath); if (settings == null) { settings = CreateInstance<MyCustomSettings>(); AssetDatabase.CreateAsset(settings, AssetPath); AssetDatabase.SaveAssets(); } return settings; }

internal static SerializedObject GetSO() => new SerializedObject(GetOrCreate()); }

static class MyCustomSettingsUIToolkit { [SettingsProvider] public static SettingsProvider CreateProvider() { return new SettingsProvider("Project/My Custom Settings (UI)", SettingsScope.Project) { label = "My Custom (UI)", activateHandler = (_, root) => { SerializedObject serializedObject = MyCustomSettings.GetSO();

VisualElement container = new VisualElement(); container.style.flexDirection = FlexDirection.Column;

container.Add(new PropertyField(serializedObject.FindProperty("m_SomeString"), "My String")); container.Add(new PropertyField(serializedObject.FindProperty("m_Number"), "My Number"));

root.Add(container); root.Bind(serializedObject);

// Optional stylesheet: // StyleSheet styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/settings_ui.uss"); // if (styleSheet != null) root.styleSheets.Add(styleSheet); }, keywords = new System.Collections.Generic.HashSet<string>(new[] { "Number", "String" }) }; } }

Свойства

Свойство Описание
activateHandlerПереопределяет SettingsProvider.OnActivate.
deactivateHandlerПереопределяет SettingsProvider.OnDeactivate.
footerBarGuiHandlerПереопределяет SettingsProvider.OnFooterBarGUI.
guiHandlerПереопределяет SettingsProvider.OnGUI.
hasSearchInterestHandlerПереопределяет SettingsProvider.HasSearchInterest.
inspectorUpdateHandlerПереопределяет SettingsProvider.OnInspectorUpdate.
keywordsПолучает или устанавливает список ключевых слов для сравнения с тем, что ищет пользователь. Когда пользователь вводит значения в поле поиска в окне Настройки, SettingsProvider.HasSearchInterest пытается сопоставить эти ключевые слова с этим списком.
labelПолучает или устанавливает отображаемое имя SettingsProvider, как оно отображается в окне Настройки. Если не установлено, окно Настройки использует последний токен SettingsProvider.settingsPath.
scopeПолучает Область действия SettingsProvider. Область действия определяет, будет ли SettingsProvider отображаться в окне Настройки (SettingsScope.User) или в окне Настройки (SettingsScope.Project).
settingsPathПолучить Путь, используемый для размещения SettingsProvider в дереве окна Настройки. Путь должен быть уникальным среди всех других путей настройки и должен использовать "/" в качестве разделителя.
titleBarGuiHandlerПереопределяет SettingsProvider.OnTitleBarGUI.

Конструкторы

Конструктор Описание
SettingsProviderСоздает новый SettingsProvider.

Открытые методы

Метод Описание
HasSearchInterestПроверяет, должен ли SettingsProvider появляться, когда пользователь вводит что-то в поле поиска окна Настройки. SettingsProvider пытается найти соответствие поисковых терминов (даже частично) с любым из SettingsProvider.keywords. Поиск не зависит от регистра.
OnActivateИспользуйте эту функцию для реализации обработчика, когда пользователь нажимает на кнопку Настройки в окне Настройки. Вы можете получить asset settings или настроить UIElements UI из этой функции.
OnDeactivateИспользуйте эту функцию для реализации обработчика, когда пользователь нажимает на другую настройку или когда окно Настройки закрывается.
OnFooterBarGUIИспользуйте эту функцию, чтобы переопределить отрисовку нижнего колонтитула SettingsProvider средствами IMGUI.
OnGUIИспользуйте эту функцию для рисования UI на основе IMGUI.. Это предполагает, что вы не добавили никаких детей к rootElement, переданному функции OnActivate.
OnInspectorUpdateOnInspectorUpdate вызывается с частотой 10 кадров в секунду, чтобы дать инспектору возможность обновить. Подробнее см. EditorWindow.OnInspectorUpdate.
OnTitleBarGUIЭта функция позволяет переопределить отрисовку заголовка SettingsProvider средствами IMGUI. Так рядом с заголовком можно разместить собственные элементы интерфейса — например, кнопку на панели инструментов. AssetSettingsProvider использует этот механизм, чтобы показать кнопки «add to preset» и «help».
RepaintЗапросите SettingsWindow для перекраски.

Защищенные методы

Метод Описание
FocusLostРазрешить SettingsProvider уведомляться, когда SettingsWindow теряет фокус.

Статические методы

Метод Описание
GetSearchKeywordsFromGUIContentPropertiesИзвлекает ключевые слова поиска из всех открытых статических членов указанного Type.
GetSearchKeywordsFromPathИзвлечение ключевых слов поиска из серийных свойств ассета в определенном пути.
GetSearchKeywordsFromSerializedObjectИзвлечение ключевых слов поиска из серийных свойств SerializedObject.