🎮 UnityDocs

Editor scripting: personaliza el Inspector

Cómo mejorar tu flujo de trabajo con atributos del Inspector (Header, Tooltip, Range, ContextMenu) y editores personalizados (CustomEditor). Herramientas hechas a medida sin salir de Unity.

📄 ArtículoAvanzado✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 8 min · ⌨️ Práctica 25 min

Por qué personalizar el editor#

Unity no solo te deja hacer juegos: te deja extender el propio editor para trabajar más rápido y cometer menos errores. Desde pequeños atributos que ordenan el Inspector hasta herramientas a medida para tu equipo. Empieza por lo barato y potente: los atributos.

Atributos del Inspector (sin escribir editores)#

Con solo decorar tus campos, mejoras muchísimo el Inspector:

C#
using UnityEngine;

public class Enemigo : MonoBehaviour
{
    [Header("Estadísticas")]              // título en negrita
    [Tooltip("Vida inicial del enemigo")] // ayuda al pasar el ratón
    [SerializeField] private int vida = 100;

    [Range(0f, 20f)]                       // deslizador
    [SerializeField] private float velocidad = 5f;

    [Space(10)]                            // separación
    [SerializeField] private string nombre;

    [TextArea]                             // caja de texto multilínea
    [SerializeField] private string descripcion;
}
Estos atributos son gratis y valen mucho

[Header], [Tooltip], [Range], [Space], [TextArea] no requieren editores personalizados y hacen tu Inspector legible y a prueba de errores. Úsalos desde ya: cuestan una línea y tu yo del futuro (y tu equipo) lo agradecerán.

[ContextMenu]: botones de utilidad#

[ContextMenu] añade una opción al menú (⋮) del componente para ejecutar un método desde el editor. Perfecto para pruebas y herramientas rápidas:

C#
[ContextMenu("Rellenar vida")]
void RellenarVida()
{
    vida = 100;
    Debug.Log("Vida restaurada");
}

Editores personalizados (CustomEditor)#

Cuando quieres cambiar cómo se dibuja el Inspector de un componente (añadir botones, ocultar campos según una condición, mostrar avisos), creas un Editor personalizado.

Va en una carpeta Editor

El código de editor no debe incluirse en la build del juego. Ponlo en una carpeta llamada exactamente Editor (Unity la trata de forma especial y la excluye del juego). Además usa using UnityEditor;, que solo existe en el editor.

C#
// Archivo: Assets/Scripts/Editor/EnemigoEditor.cs
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Enemigo))]
public class EnemigoEditor : Editor
{
    public override void OnInspectorGUI()
    {
        // Dibuja el Inspector normal
        DrawDefaultInspector();

        // 'target' es el objeto que se está inspeccionando
        Enemigo enemigo = (Enemigo)target;

        // Un botón personalizado
        if (GUILayout.Button("Matar enemigo"))
            Debug.Log(enemigo.name + " eliminado (prueba)");
    }
}

Property Drawers y atributos propios#

Un PropertyDrawer define cómo se dibuja un tipo (o un atributo) allá donde aparezca, no solo un componente. Sirve para, por ejemplo, un atributo [ReadOnly] que muestre un campo sin poder editarlo, reutilizable en todo el proyecto. Es un paso más avanzado, pero muy usado en proyectos serios para crear un Inspector consistente.

Gizmos: dibujar ayudas en la escena#

No es exactamente editor scripting, pero encaja: OnDrawGizmos dibuja ayudas visuales en la vista Scene (rangos, rutas, radios de detección). Ya lo usaste en la detección de suelo:

C#
void OnDrawGizmosSelected()
{
    Gizmos.color = Color.yellow;
    Gizmos.DrawWireSphere(transform.position, 5f);  // radio de detección
}

Cuándo merece la pena#

🛠️ Decisión de ingeniería
  • Atributos ([Header], [Range], [ContextMenu]) → siempre; casi gratis
  • Gizmos → cuando ajustar valores "a ciegas" cuesta (rangos, rutas)
  • CustomEditor / PropertyDrawer → cuando una herramienta se usa mucho o la usa un equipo, y el tiempo que ahorra compensa hacerla
  • No te pongas a construir herramientas elaboradas para algo que usarás una vez

Errores frecuentes#

  • Poner código con using UnityEditor; fuera de una carpeta Editor (la build falla al compilar).
  • Sobrecargar de herramientas de editor un proyecto pequeño (tiempo mal invertido).
  • Olvidar DrawDefaultInspector() y perder los campos normales al hacer un CustomEditor.
  • Confundir Gizmos (ayudas de editor) con algo que se ve en el juego (no aparecen en la build).

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

Empieza por los atributos del Inspector ([Header], [Tooltip], [Range], [Space], [TextArea], [ContextMenu]): mejoran el flujo por casi nada. Para cambiar cómo se dibuja un Inspector, usa un CustomEditor (en una carpeta Editor, con OnInspectorGUI y DrawDefaultInspector), y para tipos reutilizables un PropertyDrawer. Los Gizmos dibujan ayudas en la escena. Invierte en herramientas solo cuando el tiempo que ahorran lo justifica.

Fuentes y para profundizar