🎮 UnityDocs

UnityEvents: eventos desde el Inspector

Qué es un UnityEvent, cómo conectar reacciones sin escribir código (arrastrando en el Inspector) y cuándo conviene frente a los eventos de C#. La forma en que funcionan los botones de UI y los triggers reutilizables.

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

Qué es un UnityEvent#

Un UnityEvent es un evento que se puede conectar desde el Inspector, arrastrando objetos y eligiendo qué método llamar, sin escribir una línea. Es lo que hace el componente Button: su lista On Click () es un UnityEvent. Ver botones y UI.

Añadir uno a tu propio script#

C#
using UnityEngine;
using UnityEngine.Events;

public class Cofre : MonoBehaviour
{
    // Aparece en el Inspector como una lista arrastrable
    public UnityEvent alAbrir;

    public void Abrir()
    {
        // Dispara todo lo conectado en el Inspector
        alAbrir.Invoke();
    }
}

En el Inspector, Cofre mostrará el evento Al Abrir (). Le arrastras un altavoz → AudioSource.Play, unas partículas → ParticleSystem.Play, y un texto → tu método MostrarRecompensa(). Todo sin tocar el código del cofre: un diseñador puede montar la reacción.

UnityEvent con parámetro

Para pasar un dato (por ejemplo, la vida actual a una barra), usa la versión genérica: public UnityEvent<int> alCambiarVida; y alCambiarVida.Invoke(vida);. En el Inspector, el método destino debe aceptar ese tipo.

Conectar por código#

También puedes suscribirte en tiempo de ejecución:

C#
void Start()
{
    alAbrir.AddListener(Reproducir);   // añadir
}

void OnDestroy()
{
    alAbrir.RemoveListener(Reproducir); // limpiar
}

UnityEvent vs evento de C##

No compiten: resuelven cosas distintas. Ver eventos y delegados para los eventos puros de C#.

⚖️ Comparativa · UnityEvent vs event de C#
UnityEventevent / Action de C#
Se conecta en el InspectorSí (su gran ventaja)No
Lo montan diseñadores sin códigoNo
RendimientoAlgo más lento (reflexión)Muy rápido
Genera basura al invocarUn pocoCasi nada
Ideal paraUI, reacciones configurables en escenaLógica de código, sistemas, alta frecuencia
🧭 ¿Qué debería usar?
  • ¿Quieres que se configure en el editor (botones, triggers, cutscenes)? → UnityEvent
  • ¿Comunicación entre sistemas por código, o algo que se dispara muchísimo por fotograma? → event / Action de C#
  • ¿Eventos globales desacoplados entre escenas? → considera un ScriptableObject como canal de eventos

Rendimiento#

No en el Update a 60 Hz

UnityEvent.Invoke usa reflexión y es más lento que un Action. Para eventos puntuales (abrir un cofre, pulsar un botón) es irrelevante. Para algo que se dispara cada fotograma o en bucles calientes, usa un evento de C#.

Errores frecuentes#

  • Usar public UnityEvent para lógica de alta frecuencia (usa Action).
  • Suscribir con AddListener en Start y no quitar en OnDestroy (fugas si el objeto que escucha muere antes).
  • Esperar que el método destino del Inspector sea private: debe ser público para aparecer en la lista.
  • Confundir el UnityEvent con event de C#: el primero se cablea en el editor, el segundo no.

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

Un UnityEvent es un evento cableable desde el Inspector: expones public UnityEvent y llamas Invoke(), y en el editor conectas reacciones (sonido, partículas, métodos) sin tocar código. Perfecto para UI, triggers y cutscenes configurables por diseñadores. Para lógica de código o alta frecuencia, usa los eventos de C#, que son más rápidos. No se excluyen: cada uno tiene su terreno.

Fuentes y para profundizar