Delegate

Mostrando las entradas con la etiqueta Delegate. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Delegate. Mostrar todas las entradas

30/9/20

Unity tutorial: Delegados y eventos, una forma inalambrica de comunicar componentes (lógica desacoplada)


 

Introducción

En muchas ocasiones la comunicación entre clases y componentes dentro de un videojuego hecho con Unity, es vital para poder desencadenar eventos en el momento adecuado y enriquecer las experiencias así como optimizar el funcionamiento del interactivo. 

En esta ocasión y para efectos de este tutorial hare uso de un caso especifico donde el uso de esta herramienta de programación le permitirá a los componentes a interactuar y realizar sus acciones en el momento en el que se necesita.


Caso de uso

[VR TAXI Stories]:

En el juego del taxi, es necesario notificar a los pasajeros cuando el vehículo ha llegado por ellos y para esto existen múltiples formas como vinculando clases en el inspector y generando instancias, para desacoplar esta lógica y poder reutilizar el componente de notificación hemos hecho uso de EVENT y DELEGATE


Solución

Esta solución constara de 2 partes una clase que implemente estos tipos y  una clase que se suscriba y este al pendiente de estos eventos cuando ocurran.



Para ello hemos creado la clase, la cual contendrá la lógica para notificar cuando ocurren los eventos.


esta lógica de notificación incluye un método con un nombre similar al de las variables Event y Delegate, este método se encarga de validad si existe alguien suscrito por medio de un simple condicional IF y si esto es así dispara el evento.


En este caso una parte del  signature del método especial,  define como parámetro una variable booleana


[recordando que el signature de un método esta dado por: nivel de acceso, el valor de retorno y cualquier parámetro].


por diseño hemos incluido únicamente un evento relacionado con el taxi en esta ocasión para notificar cuando el taxi ha llegado a su ubicación.

Para ello hemos hecho uso de un componente muy conocido Trigger, el cual servirá en esta ocasión para validar que efectivamente el vehículo ha llegado a la posición correcta para recoger al pasajero.



Lógica de la mecánica hasta este punto:

Llega el vehículo al lugar->
         Entra al collider/Trigger -> 
        Valida que ha llegado(con un booleano)->
        Notificador dispara el evento-> 
Componentes suscritos al evento son notificados.


Clase suscriptora:

Para ello hemos creado una clase Passenger la cual es la definicion de lo que nuestro pasajero puede hacer ...


La forma en la que esta clase se suscribirá a los eventos será utilizando el operador += y la forma en la que esta se des-suscribirá de los eventos será con el operador -= estas dos operaciones son supe importantes para que funcionen correctamente los eventos.

y para que esto funcione haremos uso de dos métodos importantes OnEnable y OnDisable,  para que básicamente sirven para preguntar cuando un objeto esta disponible y activo.


ahora es muy importante notar

 QUIEN DEBE SUSCRIBIRSE?

Bueno pues recordemos que el signature del método especial que creamos, recibía un booleano, y que el delegado que creamos también tenia esta forma...

 por lo que la pregunta de quien debe suscribirse, encuentra su respuesta en. . .

Un método que posea la misma forma es decir devuelva un tipo vacío y reciba como parámetro un booleano específicamente para este caso.










Si has leído hasta acá y este tutorial te ha servido para entender el uso de eventos y delegados déjanos tus comentarios en nuestras redes sociales y comparte.