Version: 2017.1
Extendiendo el Editor
Property Drawers

Ventanas del Editor

Usted puede crear cualquier número de ventanas personalizadas en su aplicación. Estas se comportan igual que el Inspector, Escena o cualquier otra integrada. Esta es una gran manera de agregar una interfaz de usuario a un sub-sistema para su juego.

Interfaz del editor personalizado por Serious Games Interactive utilizado para acciones de escena scripting
Interfaz del editor personalizado por Serious Games Interactive utilizado para acciones de escena scripting

Hacer una ventana del editor personalizada implica los siguientes pasos sencillos:

  • Cree una script que se deriva de la Ventana del Editor.
  • Use el código para activar la ventana para mostrarse a sí misma.
  • Implemente el código GUI para su herramienta.

Derivada de la Ventana del Editor

Con el fin de hacer su Ventana de Editor, su script debe ser almacenada adentro de una carpeta llamada “Editor”. Haga una clase en este script que derive de la Ventana del Editor. Luego escriba sus controles GUI en la función OnGUI interior.

//JS Example

class MyWindow extends EditorWindow {
     function OnGUI () {
         // The actual window code goes here
     }
 }


//C# Example

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

    {
        void OnGUI () {
            // The actual window code goes here
           }
     }

MyWindow.js - colocada en una carpeta llamada ‘Editor’ dentro su proyecto.

Mostrando la ventana

Con el fin de mostrar la ventana en la pantalla, haga un elemento del menú que lo muestra. Esto es hecho creando una función que es activada por la propiedad MenuItem.

El comportamiento por defecto en Unity es en reciclar ventanas (entonces seleccionando el item del menú nuevamente va a mostrar unas ventanas existentes. Esto es hecho usando la función EditorWindow.GetWindow De esta manera:

//JS Example
class MyWindow extends EditorWindow{
     @MenuItem ("Window/My Window")
     static function ShowWindow () {
         EditorWindow.GetWindow (MyWindow);
     }

    function OnGUI () {
         // The actual window code goes here
     }
 }
//C# Example

using UnityEngine;
using UnityEditor;
using System.Collections;

class MyWindow : EditorWindow {
    [MenuItem ("Window/My Window")]

    public static void  ShowWindow () {
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI () {
        // The actual window code goes here
    }
}

Mostrando el MyWindow

Esto creará una ventana de editor estándar, acoplable que guarda su posición entre las invocaciones, puede ser utilizado en diseños personalizados, etc. Para tener más control sobre qué es creado, usted puede usar GetWindowWithRect

Implementando el GUI de Su Ventana

Los contenidos actuales de la ventana son renderizados al implementar la función OnGUI. Usted puede utilizar las mismas clases UnityGUI que usted usa para el GUI dentro del juego (GUI and GUILayout). Adicionalmente, nosotros proporcionamos algunos controles GUI adicionales, ubicados solamente en las clases del editor EditorGUI y EditorGUILayout. Estas clases se suman a los controles que ya están disponibles en las clases normales, por lo que se pueden mezclar y combinar a voluntad.

El siguiente código C# le muestra cómo usted puede agregar elementos GUI a su Ventana de Editor Personalizada:

//C# Example 
using UnityEditor; 
using UnityEngine;
public class MyWindow : EditorWindow 
{ 
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;  
    // Add menu item named "My Window" to the Window menu
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    { 
        //Show existing window instance. If one doesn't exist, make one.
        EditorWindow.GetWindow(typeof(MyWindow));
    }   
    void OnGUI()
    {
        GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField ("Text Field", myString);
         
        groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
            myBool = EditorGUILayout.Toggle ("Toggle", myBool);
            myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup ();
    } 
}


Este ejemplo resulta en una ventana que tiene este aspecto:

Ventana del editor personalizada creada usando ejemplo suministrado.
Ventana del editor personalizada creada usando ejemplo suministrado.

Para más información, eche un vistazo al ejemplo y la documentación en EditorWindow page.

Extendiendo el Editor
Property Drawers