Version: 2017.3

Editor

class in UnityEditor

/

Hereda de:ScriptableObject

Cambiar al Manual

Descripción

Clase base para obtener editores personalizados. Utilice esta clase para crear sus propios inspectores y editores personalizados para sus objetos.

Considere un script MyPlayer con variables para la armadura, daño y una referencia a una pistola GameObject:

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... } }

Usando un Editor personalizado, la apariencia del script en el Inspector puede cambiar por ejemplo para que sea mire así:


Custom editor in the Inspector.

Puede adjuntar el Editor a un componente personalizado utilizando el atributo 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 MyPlayerAlternative : 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(MyPlayerAlternative))] public class MyPlayerEditorAlternative : 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

serializedObjectUn SerializedObject representando el objeto u objetos siendo inspeccionados.
targetEl objeto siendo inspeccionado.
targetsUn arreglo de todos los objetos siendo inspeccionados.

Funciones Públicas

DrawDefaultInspectorDibuje el inspector integrado.
DrawHeaderLlame esta función para dibujar el encabezado del editor.
DrawPreviewEl primer punto de entrada para Preview Drawing.
GetInfoStringImplemente este método para mostrar información asset encima de la pre-visualización del asset.
GetPreviewTitleAnule este método si desea cambiar la etiqueta del área de vista previa.
HasPreviewGUIAnule este método en las sub-classes si usted implementa OnPreviewGUI.
OnInspectorGUIImplemente esta función para crear un inspector personalizado.
OnInteractivePreviewGUIImplemente para crear su propia vista previa personalizada interactiva. Las vistas previas interactivas personalizadas se utilizan en el área de vista previa del inspector y el selector de objetos.
OnPreviewGUIImplemente para crear su propia vista previa personalizada para el área de vista previa del inspector, los encabezados del editor principal y el selector de objetos.
OnPreviewSettingsAnule este método si desea mostrar controles personalizados en el encabezado de la vista previa.
RenderStaticPreviewAnule este método si usted quiere renderizar una previsualización estática que se muestra.
RepaintRe-pinta cualquier inspector que muestre este editor.
RequiresConstantRepaintEsta edición requiere que sea re-pintada constantemente en su estado actual?
UseDefaultMarginsAnule este método en subclases para devolver false si no desea márgenes predeterminados.

Funciones Protegidas

ShouldHideOpenButtonReturns the visibility setting of the "open" button in the Inspector.

Funciones Estáticas

CreateCachedEditor previousEditor es un editor para targetObject o targetObjects. La función devuelve si el editor ya está rastreando los objetos, o Destruye el editor anterior y crea uno nuevo.
CreateCachedEditorWithContextCreates a cached editor using a context object.
CreateEditorCrea un editor personalizado para targetObject o targetObjects.
CreateEditorWithContextMake a custom editor for targetObject or targetObjects with a context object.

Mensajes

OnSceneGUIPermite al Editor manejar un evento en la vista de escena.

Miembros heredados

Variables

hideFlags¿Debería el objeto estar oculto, guardado con la escena o modificable por el usuario?
nameEl nombre del objeto.

Funciones Públicas

GetInstanceIDDevuelve el id de la instancia del objeto.
ToStringReturns the name of the GameObject.

Funciones Estáticas

DestroyElimina un gameobject, componente o asset.
DestroyImmediateDestroys the object obj immediately. You are strongly recommended to use Destroy instead.
DontDestroyOnLoadHace que el objeto target no sea destruido automáticamente cuando se cargue una nueva escena.
FindObjectOfTypeDevuelve el primer objeto activo cargado de tipo type.
FindObjectsOfTypeDevuelve una lista de todos los objetos activos cargados de tipo type.
InstantiateClona el objeto original y devuelve el clon.
CreateInstanceCrea una instancia de un objeto scriptable.

Operadores

bool¿Existe el objeto?
operator !=Compare si dos objetos se refieren a un objeto diferente.
operator ==Compara dos referencias de objeto para ver si se refieren al mismo objeto.

Mensajes

AwakeEsta función se llama cuando el script ScriptableObject empieza.
OnDestroyEsta función se llama cuando el objeto scriptable se destruirá.
OnDisableEsta función se llama cuando el objeto scriptable se va fuera del alcance (scope).
OnEnableEsta función se llama cuando el objeto es cargado.