Menús contextuales en el Inspector de Unity

Resumen

Crear un menú contextual en Unity te permite ejecutar funciones rápidas desde el Inspector sin escribir lógica adicional dentro del juego. Si trabajas con componentes propios, este recurso te ahorra tiempo cuando necesitas instanciar objetos, resetear valores o probar comportamientos directamente desde el editor.

Esta guía te muestra cómo usar los atributos ContextMenu y ContextMenuItem en C# para extender Unity, con ejemplos prácticos como instanciar una esfera o reiniciar la vida de un personaje.

Qué es el atributo ContextMenu en Unity

El atributo ContextMenu agrega una opción al menú que aparece al hacer clic derecho sobre un componente del Inspector. Es ideal para invocar métodos sin necesidad de un botón visible.

¿Qué hace el atributo ContextMenu? Convierte un método de tu script en una opción seleccionable desde el menú de tres puntos del componente en Unity. No requiere parámetros y funciona con métodos públicos o privados.

Cómo instanciar una esfera con ContextMenu

Dentro de tu clase, declara un método y colócale el atributo encima. El método puede llamar a ObjectCreatePrimitive para generar una esfera, asignarle posición [0,0,0] y enfocarla en la escena.

El flujo básico es así:

  • Crear la primitiva con ObjectCreatePrimitive(PrimitiveType.Sphere).
  • Asignar la posición en el mundo a cero.
  • Usar la clase Selection para marcar el objeto activo.
  • Llamar a SceneView.lastActiveSceneView.FrameSelected() para hacer zoom.

Para que Selection y SceneView funcionen necesitas importar la librería del editor con using UnityEditor;. Este detalle es clave porque sin esa referencia el compilador marcará error.

Dónde aparece la opción en el Inspector

Una vez guardado el script, ve al GameObject que tenga el componente, haz clic en los tres puntos del componente o clic derecho sobre él. Verás la opción con el nombre que asignaste, por ejemplo Spawn Sphere. Al pulsarla, Unity ejecuta el método y selecciona la esfera creada automáticamente.

Para qué sirve ContextMenuItem en propiedades

Mientras ContextMenu actúa sobre el componente completo, ContextMenuItem se aplica directamente sobre una variable del Inspector. Esto te permite ejecutar funciones específicas asociadas a un campo concreto.

¿Cuál es la diferencia entre ContextMenu y ContextMenuItem? ContextMenu agrega opciones al menú general del componente. ContextMenuItem agrega opciones al hacer clic derecho sobre una propiedad específica, como una variable de vida o velocidad.

Cómo resetear una propiedad de vida

Imagina que tienes una variable life y quieres devolverla a 100 con un clic. Primero crea el método que ejecuta la lógica:

  • Define un método llamado ResetLife que asigne life = 100.
  • Sobre la variable life, agrega el atributo ContextMenuItem con dos parámetros: el texto visible y el nombre del método.
  • Usa la palabra clave nameof(ResetLife) en lugar de escribir el nombre como string. Así, si renombras el método, Visual Studio actualiza la referencia automáticamente y evitas errores silenciosos.

En el editor, haz clic derecho sobre el campo Life y aparecerá la opción Reset Life. Al seleccionarla, el valor regresa a 100 sin tocar el resto del componente.

Cuándo conviene usar menús contextuales

Estos atributos brillan cuando necesitas acelerar tareas repetitivas durante el desarrollo. Algunos casos donde resultan útiles:

  • Generar objetos de prueba en escena con un solo clic.
  • Restaurar valores por defecto de propiedades específicas.
  • Ejecutar validaciones o limpiezas sin correr el juego.
  • Probar funciones de un componente sin crear botones temporales.

¿Necesito que el método sea público o estático? No. El método puede ser público o privado, y no requiere ser estático. Lo único obligatorio es que pertenezca a la misma clase donde declaras el atributo.

La diferencia con un botón visible en el Inspector es que el menú contextual queda oculto hasta que lo invocas, lo que mantiene la interfaz limpia. Si prefieres que la acción aparezca como un botón permanente, existen otros atributos que cumplen ese rol y veremos cómo configurarlos más adelante.

¿Ya identificaste qué métodos de tus componentes podrían vivir mejor dentro de un menú contextual? Cuéntame en los comentarios qué atajos planeas crear para tu próximo proyecto en Unity.