Поддерживаемые пресеты
В вашем редакторе скриптыфрагмент кода, позволяющий создавать собственные компоненты, запускать игровые события, изменять свойства компонентов. со временем и реагировать на пользовательский ввод любым удобным для вас способом. Подробнее
См. в Словарь, используйте 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