Version: 5.6

Editor

class in UnityEditor

Switch to Manual

Description

Базовый класс для наследования пользовательских редакторов. Используйте его для создания ваших собственных инспекторов и редакторов ваших объектов.

Рассмотрим скрипт 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, чтобы выглядеть, например, так:


Custom editor in the Inspector.

Вы можете привязать редактор к пользовательскому компоненту, используя атрибут CustomEditor

There are multiple ways to design custom Editors. If you want the Editor to support multi-object editing, you can use the CanEditMultipleObjects attribute. Instead of modifying script variables directly, it's advantageous to use the SerializedObject and SerializedProperty system to edit them, since this automatically handles multi-object editing, undo, and prefab overrides. If this approach is used a user can select multiple assets in the hierarchy window and change the values for all of them at once.

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 (); } }

Alternatively, if automatic handling of multi-object editing, undo, and prefab overrides is not needed, the script variables can be modified directly by the editor without using the SerializedObject and SerializedProperty system, as in the example below.

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 (); } }

Variables

serializedObject SerializedObject, представляющий инспектируемый объект или объекты.
targetИнспектируемый объект.
targetsМассив всех инспектируемых объектов.

Public Functions

DrawDefaultInspectorВызывает отрисовку встроенного инспектора.
DrawHeaderВызывайте эту функцию для отрисовки заголовка редактора.
DrawPreviewЭто первая входная точка для рисования области предпросмотра.
GetInfoStringРеализуйте этот метод, чтобы показать информацию об ассете поверх предпросмотра ассета.
GetPreviewTitleПереопределите этот метод, если вы хотите изменить название области предпросмотра (preview).
HasPreviewGUIПереопределите этот метод в подклассах, если вы реализуете OnPreviewGUI.
OnInspectorGUIРеализуйте эту функцию для создания собственного инспектора.
OnInteractivePreviewGUIРеализуйте, чтобы создать ваш собственный интерактивный предпросмотр. Интерактивные предпросмотры используются в области предпросмотра окна Inspector и при выборе объекта.
OnPreviewGUIРеализуйте, чтобы создать ваш собственный предпросмотр в области предпросмотра инспектора, основных заголовках редактора и при выборе объекта.
OnPreviewSettingsПереопределите этот метод, если вы хотите показать пользовательские элементы в заголовке предпросмотра.
RenderStaticPreviewПереопределите этот метод, если вы хотите отрисовать статический предпросмотр для показа.
RepaintПерерисовывает все инспекторы, которые отображает этот редактор.
RequiresConstantRepaintDoes this edit require to be repainted constantly in its current state?
UseDefaultMarginsПереопределите этот метод в подклассах и возвращайте false, если вы не хотите отступы по умолчанию.

Static Functions

CreateCachedEditorOn 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.
CreateCachedEditorWithContextCreates a cached editor using a context object.
CreateEditorСоздает пользовательский редактор для obj или objects.
CreateEditorWithContextMake a custom editor for targetObject or targetObjects with a context object.

Messages

OnSceneGUIПозволяет редактору обрабатывать события в области просмотра сцены.