#8 Método Invoke de la clase MonoBehaviour. [Serie Fundamental de Unity]

ACTUALIZACIÓN IMPORTANTE

Este artícu­lo pertenece a una serie antigua del canal, actual­mente hay disponible un vídeo en el que se expli­ca mejor cómo uti­lizar la fun­ción Invoke para hac­er que una fun­ción se llame con delay, puedes ver­lo aquí:

🟢 Cómo lla­mar fun­ciones con DELAY
 

MIRA ESTE DESCABELLADO EXPERIMENTO

Introducción

En este artícu­lo vamos a ver cómo uti­lizar el méto­do Invoke de la clase MonoBe­hav­iour de Uni­ty para eje­cu­tar una acción con un retra­so deter­mi­na­do. Esto nos per­mite por ejem­p­lo crear mecan­is­mos que fun­cio­nan durante un tiempo.

Ir a la página principal del proyecto

En el sigu­iente video puedes ver la infor­ma­ción resum­i­da de este artículo.

🟢 Cómo retar­dar fun­ciones en Uni­ty
 

Procedimiento

Para analizar el méto­do Invoke uti­lizare­mos la estación "Invoke a Method" del GameDe­vLab, la cual con­siste en una máquina expende­do­ra de la nue­va y refres­cante GameDe­v­Co­la que no sólo cal­ma la sed sino que tam­bién cura tus heridas.

crear juegos en unity, serie fundamental, método invoke, programar el funcionamiento de una máquina expendedora
Fig. 1: Estación "Invoke a Method" del GameDe­vLab. Máquina expende­do­ra de GameDevCola.

Al acer­carnos a la máquina podremos inter­ac­tu­ar con ella usan­do la tecla E. Al pul­sar­la la máquina se volverá inac­ti­va, es decir no podremos inter­ac­tu­ar con ella por un tiem­po. Luego de unos segun­dos la máquina expul­sará una lata de GameDe­v­Co­la y segun­dos más tarde volverá a estar habil­i­ta­da para la interacción.

script unity, ontriggerstay, método invoke. Desarrollo de juegos en Unity.
Fig. 2: Script InvokeAMethod sin completar. 

En el Script para com­ple­tar ten­emos los méto­dos "Deliv­er­A­Co­la" y "Pre­pareMa­chine" que entre­garán la bebi­da y habil­i­tarán la máquina respectivamente.

Luego ten­emos redefinido el méto­do OnTrig­ger­Stay que nos per­mite chequear si el per­son­aje se encuen­tra para­do frente a la máquina.

Aquí dejo el artícu­lo en el que se anal­iza el méto­do OnTriggerStay.

Den­tro de este méto­do chequeamos si el Tag del GameOb­ject es el del jugador, luego si la máquina está lista (boolean machineReady), le dec­i­mos al obje­to UIMan­ag­er que se puede inter­ac­tu­ar y este se encar­ga de mostrar el men­saje en pantalla.

Luego chequeamos si se pre­siona la tecla E. En este pun­to es en el que la máquina recibe la peti­ción de una GameDe­v­Co­la. Lo primero que se hace es desac­ti­var la máquina y luego en la región con comen­tar­ios es donde debe­mos com­ple­tar el códi­go que falta.

Análisis de eventos en el tiempo

Quiero hac­er énfa­sis en esta parte porque es impor­tante que se entien­da la idea.

Cuan­do lla­mamos a un méto­do en C# la eje­cu­ción del mis­mo se real­iza en ese pre­ciso instante, se resuel­ven todas las instruc­ciones inclu­so antes de refres­car la ima­gen de la pantalla.

Entonces si llamáramos direc­ta­mente a los méto­dos en la región mar­ca­da con comen­tar­ios, lo que pasaría es que la lata sería expul­sa­da y la máquina habil­i­ta­da nue­va­mente en el mis­mo instante en el que se pul­sa la tecla E. Como se ilus­tra en la línea de tiem­po de la figu­ra 3.

línea temporal en la que se especifican cuatro puntos en el tiempo de ejecución de un videojuego
Fig. 3: Dia­gra­ma de even­tos en el tiem­po. Esto ocur­riría si llamáramos direc­ta­mente a los méto­dos.

En la figu­ra 3 se obser­va una línea de tiem­po en la que hay dos pun­tos dis­tin­tos en el tiem­po, el primer pun­to es el comien­zo del juego. En algún momen­to más ade­lante en el tiem­po se encuen­tra el segun­do pun­to, en el que el jugador pide una lata, la máquina la entre­ga y se vuelve a habil­i­tar, estas tres acciones en el mis­mo instante.

línea temporal en la que se especifican cuatro puntos en el tiempo de ejecución de un videojuego
Fig. 4: Dia­gra­ma de even­tos en el tiem­po. Esto quer­e­mos lograr.

Observe­mos aho­ra la figu­ra 4, se obser­van cua­tro pun­tos dis­tin­tos de tiempo.

Pun­to 1: Ini­cio del juego.

Pun­to 2: El jugador hace el pedi­do de la GameDevCola. 

Pun­to 3: Luego de X milise­gun­dos de que se hace el pedi­do la máquina entre­ga la lata.

Pun­to 4: Luego de Y milise­gun­dos de que se hace la entre­ga de la lata la máquina se vuelve a habilitar.

Esto es lo que vamos a hac­er uti­lizan­do el méto­do Invoke de la clase MonoBehaviour.

Resolución

El méto­do Invoke lo podemos lla­mar direc­ta­mente sin hac­er ref­er­en­cia a una clase. 

Debe­mos indicar dos parámet­ros, el primero es un String con el nom­bre del méto­do que quer­e­mos invo­car, el segun­do parámetro es un float para indicar la can­ti­dad de segun­dos que van a pasar has­ta que el méto­do final­mente sea ejecutado.

Se debe respetar las mayús­cu­las y minús­cu­las. Si nos con­fundi­mos en este pun­to, puede sur­gir un bug difí­cil de ras­trear. Si el méto­do se lla­ma "Deliv­er­A­Co­la" y nosotros invo­camos el méto­do "Deliv­er­a­Co­la" lo que va a ocur­rir es que se va a inten­tar lla­mar a ese méto­do pero como no se encuen­tra definido, el pro­gra­ma seguirá ade­lante sin eje­cu­tar esas instrucciones.

script unity, ontriggerstay, método invoke. Desarrollo de juegos en Unity.
Fig. 5: Script InvokeAMethod completo.

En la figu­ra 5 se mues­tra la res­olu­ción del ejer­ci­cio. La lata será entre­ga­da dos segun­dos después de que el jugador pre­siona la tecla E y la máquina se vuelve a habil­i­tar cua­tro segun­dos después.

crear juegos en unity, serie fundamental, método invoke, programar el funcionamiento de una máquina expendedora. Se muestra un cartel que indica que se puede interactuar con la máquina expendedora.
Fig. 6: Al acer­carse a la máquina, nos aparece un car­tel indi­can­do que se puede interactuar.

crear juegos en unity, serie fundamental, método invoke, programar el funcionamiento de una máquina expendedora, la máquina entrega una lata.
Fig. 7: Luego de unos segun­dos de inter­ac­tu­ar con la máquina, se nos entre­ga una lata.

Conclusión

El méto­do Invoke nos sirve para pospon­er en el tiem­po la eje­cu­ción de un méto­do. Si bien no es la úni­ca for­ma de lograr esto, se tra­ta de un recur­so sim­ple, fácil de recor­dar y fácil de implementar.

YouTube
Scroll al inicio
Secured By miniOrange