Comunicación telepática: eventos
Clase 21 de 24 • Curso de Introducción a Unity: Scripting
Resumen
¿Cómo se comunican los componentes en Unity cuando no están relacionados directamente?
En el desarrollo de videojuegos, comunicar componentes en Unity es esencial para la interacción adecuada de los elementos. Sin embargo, cuando los componentes no están directamente relacionados, surgen desafíos. Aquí es donde entran los eventos, una herramienta que permite la comunicación más fluida entre elementos sin necesidad de que estén directamente conectados.
¿Qué son los eventos y cómo funcionan en Unity?
Los eventos son sucesos que se anuncian dentro del juego y que otros componentes están preparados para escuchar y responder. Esto se asemeja a una especie de comunicación telepática, ya que no requiere que los objetos estén en la misma jerarquía, o incluso relacionados entre sí.
Para crear un evento, se define una propiedad pública utilizando la sintaxis public event System.Action
. Este evento puede ser invocado mediante el uso de OnAlarm?.Invoke();
, lo que garantiza que solo se ejecute si hay suscriptores. Este método corto es equivalente a comprobar si el evento es nulo antes de invocarlo:
if (OnAlarm != null) {
OnAlarm.Invoke();
}
¿Cómo los eventos pueden mejorar la interacción en un videojuego?
Considera un escenario en un juego donde los cubos representen estudiantes y grandes cubos sean salas de clase. La campana del recreo es un evento esperado. Cuando suena, todos los "estudiantes" actuarán de acuerdo, similar a cómo los componentes del juego responden a eventos.
Por ejemplo, al presionar una tecla que simula el sonido de la alarma, se invoca un evento que todos los estudiantes escuchan, permitiéndoles ejecutar una acción asociada, como moverse a su área favorita.
Implementación de eventos: paso a paso
Para poner en práctica los eventos, sigue este procedimiento:
-
Creación del evento: Define un evento en el script responsable de la "alarma".
-
Invocación del evento: Utiliza un controlador, como la pulsación de una tecla, para invocarlo.
-
Subscripción al evento: Cada componente que deba reaccionar al evento debe suscribirse a él. Se utiliza el método
+=
para añadir la función de respuesta:miEscuela.OnAlarmRecreo += IrAlRecreo;
-
Desuscripción del evento: Importante para evitar múltiples suscripciones. Se realiza con
-=
:miEscuela.OnAlarmRecreo -= IrAlRecreo;
¿Qué ventajas tienen los eventos estáticos?
Los eventos estáticos ofrecen un enfoque donde no es necesario tener una referencia directa a un objeto específico. Estos eventos pueden ser escuchados desde cualquier parte del programa sin complicaciones de referencia, proporcionando flexibilidad en situaciones de emergencia o estructura global. Por ejemplo, se podría implementar un evento para emergencias escolares donde todos los estudiantes se reúnan en un punto seguro al ocurrir una situación crítica.
Implementación de eventos estáticos
Para manejar situaciones donde todos deben responder de inmediato, los eventos estáticos son ideales. A continuación, el proceso simple para utilizarlos:
-
Definición del evento estático: Agrega la palabra clave
static
:public static event Action OnEmergencia;
-
Invocación del evento: Se realiza igual que con cualquier evento, pero esta vez desde cualquier clase sin referencia de objeto:
OnEmergencia?.Invoke();
-
Subscripción y gestión: Cada componente específico que escuche el evento debe suscribirse utilizando métodos
+=
y gestionar su desuscripción adecuadamente con-=
.
Esta técnica mejora la comunicación entre componentes en juegos más complejos, proporcionando una solución robusta y eficiente. Te animamos a seguir explorando eventos y su potencial en proyectos de Unity. Ellos representan una ventaja estratégica en el desarrollo de experiencias interactivas de alta calidad. No olvides consultar los recursos adicionales para profundizar tus conocimientos y llevar tus habilidades al siguiente nivel.