Editor
class in
UnityEditor
/
Наследует от:ScriptableObject
Предложить изменения
Успех!
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Закрыть
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста <a>попробуйте снова</a> через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.
Закрыть
Руководство
Описание
Базовый класс для наследования пользовательских редакторов. Используйте его для создания ваших собственных инспекторов и редакторов ваших объектов.
Рассмотрим скрипт MyPlayer с переменными для брони, повреждений и ссылкой на игровой объект оружия.
using UnityEngine;
using System.Collections;
// This is not an editor script.
public class MyPlayer : MonoBehaviour {
public int armor = 75;
public int damage = 25;
public GameObject gun;
void Update () {
// Update logic here...
}
}
Используя пользовательский редактор, может быть изменен внешний вид скрипта в окне Inspector, чтобы выглядеть, например, так:
Пользовательский редактор в окне Inspector.
Вы можете привязать редактор к пользовательскому компоненту, используя атрибут CustomEditor
Существует несколько способов проектирования пользовательских редакторов.
Если вы хотите, чтобы редактор поддерживал изменение сразу нескольких объектов, вы можете использовать атрибут CanEditMultipleObjects.
Вместо изменения переменных скрипта напрямую, выгодно использовать систему SerializedObject и SerializedProperty
для их редактирования, так как это автоматически обрабатывает редактирование нескольких объектов, отмену и переопределение префабов.
using UnityEditor;
using UnityEngine;
using System.Collections;
// Custom Editor using SerializedProperties.
// Automatic handling of multi-object editing, undo, and prefab overrides.
[CustomEditor(typeof(MyPlayer))]
[CanEditMultipleObjects]
public class MyPlayerEditor : Editor {
SerializedProperty damageProp;
SerializedProperty armorProp;
SerializedProperty gunProp;
void OnEnable () {
// Setup the SerializedProperties.
damageProp = serializedObject.FindProperty ("damage");
armorProp = serializedObject.FindProperty ("armor");
gunProp = serializedObject.FindProperty ("gun");
}
public override void OnInspectorGUI() {
// Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
serializedObject.Update ();
// Show the custom GUI controls.
EditorGUILayout.IntSlider (damageProp, 0, 100, new GUIContent ("Damage"));
// Only show the damage progress bar if all the objects have the same damage value:
if (!damageProp.hasMultipleDifferentValues)
ProgressBar (damageProp.intValue / 100.0f, "Damage");
EditorGUILayout.IntSlider (armorProp, 0, 100, new GUIContent ("Armor"));
// Only show the armor progress bar if all the objects have the same armor value:
if (!armorProp.hasMultipleDifferentValues)
ProgressBar (armorProp.intValue / 100.0f, "Armor");
EditorGUILayout.PropertyField (gunProp, new GUIContent ("Gun Object"));
// Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
serializedObject.ApplyModifiedProperties ();
}
// Custom GUILayout progress bar.
void ProgressBar (float value, string label) {
// Get a rect for the progress bar using the same margins as a textfield:
Rect rect = GUILayoutUtility.GetRect (18, 18, "TextField");
EditorGUI.ProgressBar (rect, value, label);
EditorGUILayout.Space ();
}
}
Или же, если автоматическая обработка редактирования нескольких объектов, отмены,
и переопределение префабов не нужны, переменные скрипта могут быть
изменены напрямую редактором, без использования SerializedObject
и SerializedProperty, как в примере ниже.
using UnityEditor;
using UnityEngine;
using System.Collections;
// Example script with properties.
public class MyPlayer : MonoBehaviour {
public int damage;
public int armor;
public GameObject gun;
// ...other code...
}
// Custom Editor the "old" way by modifying the script variables directly.
// No handling of multi-object editing, undo, and prefab overrides!
[CustomEditor (typeof(MyPlayer))]
public class MyPlayerEditor : Editor {
public override void OnInspectorGUI () {
MyPlayer mp = (MyPlayer)target;
mp.damage = EditorGUILayout.IntSlider ("Damage", mp.damage, 0, 100);
ProgressBar (mp.damage / 100.0f, "Damage");
mp.armor = EditorGUILayout.IntSlider ("Armor", mp.armor, 0, 100);
ProgressBar (mp.armor / 100.0f, "Armor");
bool allowSceneObjects = !EditorUtility.IsPersistent (target);
mp.gun = (GameObject)EditorGUILayout.ObjectField ("Gun Object", mp.gun, typeof(GameObject), allowSceneObjects);
}
// Custom GUILayout progress bar.
void ProgressBar (float value, string label) {
// Get a rect for the progress bar using the same margins as a textfield:
Rect rect = GUILayoutUtility.GetRect (18, 18, "TextField");
EditorGUI.ProgressBar (rect, value, label);
EditorGUILayout.Space ();
}
}
Переменные
serializedObject |
SerializedObject, представляющий инспектируемый объект или объекты. |
target | Инспектируемый объект. |
targets | Массив всех инспектируемых объектов. |
Открытые функции
DrawDefaultInspector | Вызывает отрисовку встроенного инспектора. |
DrawHeader | Вызывайте эту функцию для отрисовки заголовка редактора. |
DrawPreview | Это первая входная точка для рисования области предпросмотра. |
GetInfoString | Реализуйте этот метод, чтобы показать информацию об ассете поверх предпросмотра ассета. |
GetPreviewTitle | Переопределите этот метод, если вы хотите изменить название области предпросмотра (preview). |
HasPreviewGUI | Переопределите этот метод в подклассах, если вы реализуете OnPreviewGUI. |
OnInspectorGUI | Реализуйте эту функцию для создания собственного инспектора. |
OnInteractivePreviewGUI | Реализуйте, чтобы создать ваш собственный интерактивный предпросмотр. Интерактивные предпросмотры используются в области предпросмотра окна Inspector и при выборе объекта. |
OnPreviewGUI | Реализуйте, чтобы создать ваш собственный предпросмотр в области предпросмотра инспектора, основных заголовках редактора и при выборе объекта. |
OnPreviewSettings | Переопределите этот метод, если вы хотите показать пользовательские элементы в заголовке предпросмотра. |
RenderStaticPreview | Переопределите этот метод, если вы хотите отрисовать статический предпросмотр для показа. |
Repaint | Перерисовывает все инспекторы, которые отображает этот редактор. |
RequiresConstantRepaint | Does this edit require to be repainted constantly in its current state? |
UseDefaultMargins | Переопределите этот метод в подклассах и возвращайте false, если вы не хотите отступы по умолчанию. |
Статические функции
CreateCachedEditor | On return previousEditor is an editor for targetObject or targetObjects. The function either returns if the editor is already tracking the objects, or Destroys the previous editor and creates a new one. |
CreateEditor | Создает пользовательский редактор для obj или objects. |
Сообщения
OnSceneGUI | Позволяет редактору обрабатывать события в области просмотра сцены. |
Унаследованные члены
Переменные
hideFlags | Should the object be hidden, saved with the scene or modifiable by the user? |
name | The name of the object. |
Статические функции
Destroy | Removes a gameobject, component or asset. |
DestroyImmediate | Destroys the object obj immediately. You are strongly recommended to use Destroy instead. |
DontDestroyOnLoad | Makes the object target not be destroyed automatically when loading a new scene. |
FindObjectOfType | Returns the first active loaded object of Type type. |
FindObjectsOfType | Returns a list of all active loaded objects of Type type. |
Instantiate | Returns a copy of the object original. |
CreateInstance | Creates an instance of a scriptable object. |
Операторы
bool | Does the object exist? |
operator != | Compares if two objects refer to a different object. |
operator == | Compares two object references to see if they refer to the same object. |
Сообщения
OnDestroy | This function is called when the scriptable object will be destroyed. |
OnDisable | This function is called when the scriptable object goes out of scope. |
OnEnable | This function is called when the object is loaded. |