GAME EVENTS TOOLKITDOCUMENTACIÓN
← Asset
ESEN
Unity 2022.3+
GUÍA OFICIAL

Eventos desacoplados para cualquier proyecto Unity.

Un sistema de eventos profesional basado en ScriptableObjects. 8 tipos de evento, listeners configurables desde el Inspector, herramientas de editor y cero dependencias externas.

Motor
Unity 2022.3 LTS+
Render
Built-in / URP / HDRP
Dependencias
Ninguna externa
01 Eventos como assets: crea, conecta y monitoriza sin acoplar componentes.
01

PRIMEROS PASOS

Instalación y escena Demo

1

Importa el paquete

Importa Game Events Toolkit desde el Asset Store. Espera a que Unity termine de compilar.

2

Ejecuta el Setup

Ve a Tools → Game Events Toolkit → Setup Demo Scene y pulsa "Create Demo".

3

Pulsa Play

Muévete con WASD, acércate a los ítems para recogerlos, usa los botones de la UI para probar los eventos.

WASDMover al jugador
↑↓←→Mover (alternativo)
Botones UIDamage / Heal / Pick Up
02 La escena demo incluye un player con movimiento, ítems coleccionables con animación, barra de vida con gradiente, sistema de muerte/reinicio y Event Debugger.
02

CONCEPTO

Arquitectura del sistema

El patrón es simple: un ScriptableObject actúa como canal de eventos. Cualquier script puede emitir a ese canal, y cualquier listener puede escucharlo, sin que se conozcan entre sí.

A

Emisor

Cualquier MonoBehaviour con una referencia al evento. Llama a Raise() o Raise(value).

B

Evento (SO)

Un ScriptableObject que almacena la lista de oyentes y los notifica al ser emitido.

C

Listener

Un componente que se registra en OnEnable y dispara un UnityEvent como respuesta.

03

EVENTOS

Crear eventos

Los eventos son assets de ScriptableObject. Créalos desde el menú del proyecto y reutilízalos en cualquier escena.

RutaAssets → Create → Game Events Toolkit → Events → [Tipo]

VoidGameEvent

Uso
Señales sin datos: muerte, inicio de partida, pausa.

FloatGameEvent

Uso
Valores numéricos: salud, daño, velocidad.

StringGameEvent

Uso
Texto: nombre de ítem, diálogo, notificaciones.

Todos los tipos disponibles

V

Void

Señal sin datos.

B

Bool

true / false

I

Int

Número entero

F

Float

Número decimal

S

String

Cadena de texto

V2

Vector2

Posición / dirección 2D

V3

Vector3

Posición / dirección 3D

GO

GameObject

Referencia a objeto

04

EMISIÓN

Emitir eventos desde código

Añade una referencia [SerializeField] al evento en tu script, asígnala en el Inspector y llama a Raise().

Evento Void

using UnityEngine;
using GameEventsToolkit;

public class PlayerDeath : MonoBehaviour
{
    [SerializeField] private VoidGameEvent playerDiedEvent;

    public void Die()
    {
        playerDiedEvent.Raise();
    }
}

Evento con valor

using UnityEngine;
using GameEventsToolkit;

public class HealthSystem : MonoBehaviour
{
    [SerializeField] private FloatGameEvent healthChangedEvent;
    private float health = 100f;

    public void TakeDamage(float amount)
    {
        health = Mathf.Max(0f, health - amount);
        healthChangedEvent.Raise(health);
    }
}
05

RESPUESTAS

Listeners

Los listeners son componentes que escuchan un evento y disparan respuestas UnityEvent. No necesitas escribir código.

1

Añade el componente

Add Component → Game Events Toolkit → [Tipo] Game Event Listener

2

Asigna el evento

Arrastra el ScriptableObject al campo Game Event.

3

Conecta respuestas

Añade entradas al Response (UnityEvent) como lo harías con un botón.

03 Un FloatGameEventListener conectado a HealthChanged que llama a UpdateHealth en el componente DemoHealthUI.

Listeners disponibles

VoidGameEventListener

Game Events Toolkit → Void Game Event Listener

Game Event
VoidGameEvent a escuchar
Response
UnityEvent (sin parámetros)

FloatGameEventListener

Game Events Toolkit → Float Game Event Listener

Game Event
FloatGameEvent a escuchar
Response
UnityEvent<float>

StringGameEventListener

Game Events Toolkit → String Game Event Listener

Game Event
StringGameEvent a escuchar
Response
UnityEvent<string>

BoolGameEventListener

Game Events Toolkit → Bool Game Event Listener

Game Event
BoolGameEvent a escuchar
Response
UnityEvent<bool>
06

REFERENCIA

Tipos de evento

Referencia rápida de todos los tipos incluidos.

TipoClase del eventoListener
VoidVoidGameEventVoidGameEventListener
BoolBoolGameEventBoolGameEventListener
IntIntGameEventIntGameEventListener
FloatFloatGameEventFloatGameEventListener
StringStringGameEventStringGameEventListener
Vector2Vector2GameEventVector2GameEventListener
Vector3Vector3GameEventVector3GameEventListener
GameObjectGameObjectGameEventGameObjectGameEventListener
07

HERRAMIENTAS

Custom Inspector

Cada evento ScriptableObject muestra información extendida en el Inspector durante Play Mode.

Información estática

  • Descripción del evento
  • Tipo de evento

Runtime (solo Play Mode)

  • Número de listeners activos
  • Veces emitido
  • Último valor enviado
  • Último momento de emisión
  • Botón de test con campo de valor
08

MONITORIZACIÓN

Event Debugger

Una ventana del editor que muestra todos los eventos activos en la escena con información en tiempo real.

AbrirTools → Game Events Toolkit → Event Debugger
04 El Event Debugger muestra nombre, tipo, veces emitido, listeners activos, último valor y hora de cada evento.

Columnas

EventNombre del asset ScriptableObject
TypeTipo del evento (Void, Float, String…)
RaisedNúmero de veces que se ha emitido
ListenersListeners registrados actualmente
Last ValueÚltimo valor enviado (tipados)
Last RaisedHora de la última emisión
09

DESARROLLO

API de referencia

GameEventBase (abstracta)

string DescriptionDescripción del evento (solo lectura). string TypeNameNombre del tipo ("Void", "Float"…). int ListenerCountNúmero de listeners registrados.

VoidGameEvent

void Raise()Emite el evento a todos los listeners registrados. void RegisterListener(IGameEventListener)Registra un listener void. void UnregisterListener(IGameEventListener)Desregistra un listener void.

GameEvent<T> (Float, Int, Bool, String…)

void Raise(T value)Emite el evento con un valor tipado. void RegisterListener(IGameEventListener<T>)Registra un listener tipado. void UnregisterListener(IGameEventListener<T>)Desregistra un listener tipado.

Interfaces

IGameEventListenerInterfaz para listeners void. Método: OnEventRaised() IGameEventListener<T>Interfaz para listeners tipados. Método: OnEventRaised(T value)
10

EXTENSIÓN

Extender el sistema

Crear un tipo de evento personalizado requiere solo 2 clases de una línea.

Paso 1: Crear el evento

using UnityEngine;
using GameEventsToolkit;

[CreateAssetMenu(menuName = "Game Events Toolkit/Events/Color Event")]
public class ColorGameEvent : GameEvent<Color>
{
    public override string TypeName => "Color";
}

Paso 2: Crear el listener

using GameEventsToolkit;
using UnityEngine;

public class ColorGameEventListener
    : BaseGameEventListener<ColorGameEvent, Color> { }
11

GUÍA

Buenas prácticas

Recomendado

  • Un evento por concepto ("HealthChanged", no "DataChanged").
  • Organizar eventos en carpetas por sistema.
  • Usar la descripción del ScriptableObject para documentar.
  • Desactivar listeners que no necesites (desactivando el GameObject).
  • Usar el Event Debugger durante desarrollo.

Evitar

  • Emitir cada frame (usar solo para cambios de estado).
  • Crear eventos genéricos que sirvan para todo.
  • Registrar/desregistrar manualmente en lugar de usar los listeners.
  • Referenciar directamente entre sistemas (el evento es el puente).
12

PROYECTO

Estructura del proyecto

El asset está organizado con Assembly Definitions para separar runtime y editor.

Runtime/Core/GameEventBase, GameEvent<T>, interfaces
Runtime/Events/8 tipos de evento concretos
Runtime/Listeners/Base listener + 8 listeners concretos
Runtime/Utilities/GameEventRaiser (componente helper)
Editor/Inspectors/Custom Inspector para todos los eventos
Editor/EventDebugger/Ventana Event Debugger
Demo/Scripts/Scripts de la escena demo
Demo/Scenes/GameEventsDemo.unity

GameEventsToolkit.Runtime

Assembly Definition del runtime. Auto-referenciado, sin dependencias externas.

GameEventsToolkit.Editor

Assembly Definition del editor. Referencia al runtime, plataforma solo Editor.

13

SOPORTE

Solución de problemas

El listener no responde al evento

Verifica que el campo Game Event del listener tenga asignado el mismo ScriptableObject que usa el emisor. Comprueba que el GameObject del listener esté activo y que el componente listener esté habilitado.

El Custom Inspector no muestra información runtime

La información runtime solo aparece durante Play Mode. Selecciona el asset del evento en el Project y entra en Play Mode.

El Event Debugger está vacío

El debugger muestra eventos que existen como assets en el proyecto. Si no aparecen, asegúrate de que los ScriptableObjects están creados y no ocultos por HideFlags.

Error de compilación: namespace no encontrado

Añade using GameEventsToolkit; en la parte superior de tu script. Si usas Assembly Definitions propios, añade una referencia a GameEventsToolkit.Runtime.

Los eventos no se resetean al salir de Play Mode

Los campos de debug usan [NonSerialized] y se reinician automáticamente con el domain reload. Si tienes "Enter Play Mode Settings" sin domain reload, los contadores pueden persistir — pulsa Reset en el debugger.

¿Puedo crear tipos de evento personalizados?

Sí. Hereda de GameEvent<T> para el evento y de BaseGameEventListener<TEvent, TValue> para el listener. Consulta la sección Extender el sistema.