Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Поддержка пресетов

Поддерживаемые пресеты

В вашем редакторе скриптыфрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменять свойства компонентов. со временем и реагировать на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь
, используйте ObjectFactory для создания нового GameObjectsфундаментального объекта в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. Словарь
, компоненты и активы. При создании этих элементов класс ObjectFactory автоматически использует предустановки по умолчанию. Вашему сценарию не нужно искать и применять предварительные настройки по умолчанию, поскольку ObjectFactory сделает это за вас.

Поддержка новых типов

Чтобы поддерживать и включать предустановки по умолчанию, ваш класс должен наследовать одно из следующих:

Предустановленный ИнспекторОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и отредактируйте значения. Дополнительная информация
См. Словарь
создает временный экземпляр вашего класса, чтобы пользователи могли изменять его значения, поэтому убедитесь, что ваш класс не влияет и не зависит от других объектов, таких как статические значения, активы проекта или SceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Просмотреть в Словарь
.

Совет. Использовать атрибут CustomEditor необязательно.

Пример использования: предварительные настройки в пользовательском окне редактора

При настройке пользовательского класса EditorWindow с параметрами, которые могут использовать предустановки:

  • Используйте ScriptableObject для хранения копии ваших настроек. Он также может иметь атрибут CustomEditor. Система пресетов обрабатывает этот объект.

  • Всегда используйте этот временный инспектор ScriptableObject, чтобы отображать предустановленные настройки в классе UI(Пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
    См. в Словарь
    . Это позволяет вашим пользователям использовать один и тот же пользовательский интерфейс в вашем EditorWindow и при редактировании сохраненных пресетов.

  • Откройте кнопку Preset и используйте собственную реализацию PresetSelectorReceiver, чтобы сохранить свое EditorWindow настройки обновляются при выборе стиля в окне Выбор стиля.

Следующие примеры скриптов демонстрируют, как добавить предустановленные настройки в простое окно EditorWindow.

В этом примере скрипта демонстрируется ScriptableObject, который сохраняет и отображает настройки в пользовательском окне (сохраненном в файле с именем Editor/MyWindowSettings.cs):

using UnityEngine; // Temporary ScriptableObject used by the Preset system public class MyWindowSettings : ScriptableObject { [SerializeField] string m_SomeSettings; public void Init(MyEditorWindow window) { m_SomeSettings = window.someSettings; } public void ApplySettings(MyEditorWindow window) { window.someSettings = m_SomeSettings; window.Repaint(); } }

Пример скрипта PresetSelectorReceiver, который обновляет ScriptableObject, используемый в пользовательском окне (сохраненный в файл с именем Редактор/MySettingsReceiver.cs):

using UnityEditor.Presets; // PresetSelector receiver to update the EditorWindow with the selected values. public class MySettingsReceiver : PresetSelectorReceiver { Preset initialValues; MyWindowSettings currentSettings; MyEditorWindow currentWindow; public void Init(MyWindowSettings settings, MyEditorWindow window) { currentWindow = window; currentSettings = settings; initialValues = new Preset(currentSettings); } public override void OnSelectionChanged(Preset selection) { if (selection != null) { // Apply the selection to the temporary settings selection.ApplyTo(currentSettings); } else { // None have been selected. Apply the Initial values back to the temporary selection. initialValues.ApplyTo(currentSettings); } // Apply the new temporary settings to our manager instance currentSettings.ApplySettings(currentWindow); } public override void OnSelectionClosed(Preset selection) { // Call selection change one last time to make sure you have the last selection values. OnSelectionChanged(selection); // Destroy the receiver here, so you don't need to keep a reference to it. DestroyImmediate(this); } }

Пример скрипта EditorWindow, который показывает пользовательские настройки с помощью временного инспектора ScriptableObject и его кнопки Preset (сохраненной в файле с именем Editor/MyEditorWindow). .cs):

using UnityEngine; using UnityEditor; using UnityEditor.Presets; public class MyEditorWindow : EditorWindow { // get the Preset icon and a style to display it private static class Styles { public static GUIContent presetIcon = EditorGUIUtility.IconContent("Preset.Context"); public static GUIStyle iconButton = new GUIStyle("IconButton"); } Editor m_SettingsEditor; MyWindowSettings m_SerializedSettings; public string someSettings { get { return EditorPrefs.GetString("MyEditorWindow_SomeSettings"); } set { EditorPrefs.SetString("MyEditorWindow_SomeSettings", value); } } // Method to open the window [MenuItem("Window/MyEditorWindow")] static void OpenWindow() { GetWindow(); } void OnEnable() { // Create your settings now and its associated Inspector // that allows to create only one custom Inspector for the settings in the window and the Preset. m_SerializedSettings = ScriptableObject.CreateInstance(); m_SerializedSettings.Init(this); m_SettingsEditor = Editor.CreateEditor(m_SerializedSettings); } void OnDisable() { Object.DestroyImmediate(m_SerializedSettings); Object.DestroyImmediate(m_SettingsEditor); } void OnGUI() { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("My custom settings", EditorStyles.boldLabel); GUILayout.FlexibleSpace(); // create the Preset button at the end of the "MyManager Settings" line. var buttonPosition = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight, Styles.iconButton); if (EditorGUI.DropdownButton(buttonPosition, Styles.presetIcon, FocusType.Passive, Styles.iconButton)) { // Create a receiver instance. This destroys itself when the window appears, so you don't need to keep a reference to it. var presetReceiver = ScriptableObject.CreateInstance(); presetReceiver.Init(m_SerializedSettings, this); // Show the PresetSelector modal window. The presetReceiver updates your data. PresetSelector.ShowSelector(m_SerializedSettings, null, true, presetReceiver); } EditorGUILayout.EndHorizontal(); // Draw the settings default Inspector and catch any change made to it. EditorGUI.BeginChangeCheck(); m_SettingsEditor.OnInspectorGUI(); if (EditorGUI.EndChangeCheck()) { // Apply changes made in the settings editor to our instance. m_SerializedSettings.ApplySettings(this); } } }

Новая функция в 2018.1

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3