Ciclo de vida del editor en Unity IMGUI

Resumen

El sistema IMGUI (Immediate Mode Graphic User Interface) de Unity te permite programar botones y controles que se renderizan directamente en el editor, pensados para el flujo de trabajo del desarrollador. Si estás aprendiendo a crear herramientas internas en Unity, entender el ciclo de vida del editor es el primer paso para escribir código que reaccione cuando agregas un componente, cambias un valor o dibujas una interfaz.

Este contenido te sirve si trabajas con MonoBehaviour y quieres aprovechar funciones como Reset, OnValidate y OnGUI para automatizar tareas y reducir errores al configurar objetos en escena.

¿Qué es IMGUI y por qué solo funciona en modo desarrollador?

IMGUI es el sistema de interfaz gráfica inmediata de Unity, diseñado para crear controles visuales dentro del editor. Lo importante es que este sistema no se incluye al compilar un build de producción: solo está disponible en versiones de desarrollo, así que lo vas a usar para herramientas internas, depuración y editores personalizados, no para la UI final del juego.

El ciclo de vida del editor tiene mensajes propios, similares a los que ya conoces en MonoBehaviour como Awake, Start, Update y FixedUpdate. La diferencia es que estos mensajes del editor se disparan en momentos específicos del flujo de trabajo, no durante el runtime del juego.

¿Qué significa IMGUI en Unity? Es el acrónimo de Immediate Mode Graphic User Interface, un sistema para dibujar controles de UI directamente desde código en cada frame, principalmente en el editor.

¿Cómo usar Reset para inicializar valores en MonoBehaviour?

La función Reset se llama una sola vez cada vez que agregas un componente MonoBehaviour a un GameObject, y también cuando haces clic derecho sobre el componente y eliges Reset desde el editor [02:48]. Su utilidad principal es inicializar variables con valores por defecto sin tener que ajustarlos manualmente cada vez.

Imagina que tienes una variable vida que siempre debería empezar en 100. Sin Reset, cada vez que agregas el componente la vida aparece en cero y tienes que cambiarla a mano. Con Reset defines ese valor inicial directamente en código:

csharp private int vida;

private void Reset() { vida = 100; }

Apenas arrastras el script al objeto, la vida queda configurada en 100 automáticamente. Esto te ahorra tiempo y evita bugs por valores no inicializados.

¿Para qué sirve OnValidate y cómo evita errores en el editor?

OnValidate se ejecuta cada vez que cambias el valor de una propiedad del componente desde el Inspector [04:30]. Sirve para validar entradas del diseñador y corregir valores inválidos al instante, antes de que rompan algo en runtime.

Un caso típico: la vida de un personaje no debería ser negativa. Puedes forzar ese límite así:

csharp private void OnValidate() { if (vida < 0) vida = 0; }

Cada vez que alguien intente poner un número negativo, el editor lo regresa a cero automáticamente. Esta función es especialmente útil para hacer clamp de valores, validar referencias asignadas y avisar al diseñador cuando algo no está bien configurado.

¿Cuándo se llama OnValidate? Se llama al cargar el script y cada vez que modificas un valor del componente desde el Inspector del editor.

¿Cómo funciona OnGUI y en qué se diferencia de Update?

OnGUI es la función que dibuja controles del sistema IMGUI y, a diferencia de Reset y OnValidate, solo se ejecuta en runtime cuando el script está dentro de un MonoBehaviour [06:20]. No es un mensaje exclusivo del editor: necesita que el juego esté corriendo para activarse.

La gran diferencia con Update es que OnGUI se llama múltiples veces por frame. ¿Por qué? Porque se ejecuta una vez por cada evento que recibe el sistema:

  • Un clic del ratón.
  • Una tecla presionada.
  • Un evento de repintado.
  • Eventos de layout y dibujo.

Esto significa que si pones un Debug.Log dentro de OnGUI, vas a ver varias llamadas seguidas, incluso cuando aparentemente no está pasando nada. Por eso no es tan controlable como Update y conviene usarlo solo para dibujar UI inmediata, no para lógica de juego.

¿Qué herramientas del editor puedes construir con estas funciones?

Combinando estas tres funciones tienes la base para crear flujos de trabajo más sólidos en Unity:

  • Reset te da valores por defecto coherentes al agregar componentes.
  • OnValidate protege tus datos de configuraciones inválidas en tiempo real.
  • OnGUI abre la puerta a dibujar controles personalizados en pantalla durante el juego o en ventanas del editor.

La imagen del ciclo de vida del editor que Unity proporciona es una buena referencia para entender el orden en que se disparan todos estos mensajes. Vale la pena tenerla a mano mientras experimentas con cada función.

¿Ya probaste agregar un Reset a tus scripts? Cuéntame en los comentarios qué valores sueles inicializar por defecto y si has usado OnValidate para atrapar bugs antes de que lleguen al juego.