#5 Método OnTriggerStay. [Serie Fundamental de Unity]

Introducción

En este artícu­lo vamos a estu­di­ar cómo uti­lizar el méto­do OnTrig­ger­Stay para detec­tar al per­son­aje en una deter­mi­na­da región y aplicar acciones cuan­do eso ocur­ra. Conc­re­ta­mente vamos a hac­er que las esta­ciones de daño y regen­eración de salud afecten al personaje.

Página principal del proyecto

Antes de empezar te invi­to a ver el video que hice para resumir este artículo. 

Método OnTriggerStay
👉

POR FAVOR CONSIDERA SUSCRIBIRTE AL CANAL

Procedimiento

Vamos a uti­lizar la estación "OnTrig­ger­Stay", la cual con­siste en dos aparatos con for­ma de detec­tor de met­al, uno rojo y otro verde y cuya fun­ción es afec­tar nue­stro sis­tema de salud. Al entrar en la estación roja nues­tra salud debe dis­minuir y con la estación verde debe aumentar.

modelos 3d similares a detector de metal. En el centro un cartel que dice "OnTriggerStay Station".
Fig. 1: Estación OnTrig­ger­Stay del GameDevLab.

Todos estos obje­tos se encuen­tran den­tro del emp­ty GameOb­ject "#5 OnTrig­ger­Stay". Ten­emos una estación de regen­eración (Health­Sta­tion) y otra de daño (Dam­ageS­ta­tion).

la jerarquía de la escena "GameDevLab" de un proyecto en Unity3D.
Fig. 2: Jer­ar­quía de la esce­na. Todos los ele­men­tos de la estación están en el GameOb­ject #5 OnTriggerStay.

Tan­to Health­Sta­tion como Dam­ageS­ta­tion tienen asig­na­do el mis­mo script, "OnTrig­ger­Stay­Ac­tion".

componente script "OnTriggerStay Action" visualizado en inspector en Unity3D
Fig. 3: Script asig­na­do a los GameOb­jects "Health­Sta­tion" y "Dam­ageS­ta­tion".

En el inspec­tor podemos mod­i­ficar la can­ti­dad de salud que nos dá o nos qui­ta a través del float "amountHealth" y podemos ele­gir el tipo de estación que es.

componente script "OnTriggerStay Action" visualizado en inspector en Unity3D. Menu desplegable con opciones health y damage
Fig. 4: El script nos per­mite ele­gir si la estación hace daño o regenera.

Para que las esta­ciones puedan hac­er su tra­ba­jo es nece­sario que el jugador ten­ga algún tipo de sis­tema de salud al cual afec­tar. Esto ya viene resuel­to en el GameDe­vLab. El GameOb­ject First­Per­son­Play­er tiene asig­na­do un script lla­ma­do "Health­Sim­ple" que cuen­ta con las vari­ables y méto­dos nece­sar­ios para pro­por­cionarle al jugador un sis­tema de salud simple.

componente script "HealthSimple" visualizado en inspector en Unity3D
Fig. 5: Script asig­na­do al GameOb­ject FirstPersonPlayer.

Resolución

Al abrir el script OnTrig­ger­Stay­Ac­tion por primera vez nos encon­tramos con lo que se ve en la figu­ra 6. Hay una región defini­da entre comen­tar­ios donde se sug­iere redefinir el méto­do OnTrig­ger­Stay.

script c# en unity
Fig. 6: Script OnTrig­ger­Stay­Ac­tion sin completar.

¿Cómo funciona el método OnTriggerStay?

Este méto­do está definido en la clase MonoBe­hav­iour, por lo tan­to estará pre­sente por defec­to en cualquier script nue­vo que hagamos.

Se eje­cu­ta automáti­ca­mente si un GameOb­ject con Col­lid­er entra en la región defini­da por otro Col­lid­er que está en Modo Trig­ger. Además al menos uno de los dos GameOb­jects debe ten­er un com­po­nente Rigid­Body asignado.

Fig. 7: Mien­tras los col­lid­ers no se toquen, el méto­do OnTrig­ger­Stay no se ejecuta.

Fig. 8: Los col­lid­ers se están tocan­do, por lo tan­to el méto­do OnTrig­ger­Stay se ejecuta.

En la figu­ra 9 se mues­tra la res­olu­ción del ejercicio.

Fig. 9: Res­olu­ción del script OnTriggerStayAction.

Redefin­i­mos el méto­do OnTrig­ger­Stay que recibe como parámetro el Col­lid­er que ha entra­do en con­tac­to con el trig­ger. Le damos el nom­bre "col" a la ref­er­en­cia de este Col­lid­er.

Lo que ten­emos que hac­er es en primer lugar deter­mi­nar si el GameOb­ject cuyo Col­lid­er entró en con­tac­to tiene un sis­tema de salud al cual afec­tar, esto lo hace­mos obte­nien­do la ref­er­en­cia de la com­po­nente Health­Sim­ple que puede estar asig­na­da a este GameObject.

Si el GameOb­ject tiene sis­tema de salud, ten­dremos una com­po­nente Health­Sim­ple, en caso con­trario nues­tra vari­able va a ten­er el val­or null. Usamos esto como condi­ción en la sen­ten­cia if.

Si la condi­ción es ver­dadera eje­cu­ta­mos el méto­do play­erIsUn­derTheS­ta­tion y pasamos como parámetro la ref­er­en­cia de Health­Sim­ple que se encuen­tra en health.

Con esto ya ten­emos resuel­to el prob­le­ma del video, a par­tir de ese pun­to la com­po­nente Health­Sim­ple se encar­gará de mane­jar el tema de la salud.

habitación con varios modelos 3d, máquina expendedora, engranajes, en el centro se observa un cartel que dice "no olvides suscribirte"
Fig. 10: Val­or de salud luego de unos segun­dos en la estación de daño.

Al entrar en la estación de daño nues­tra salud comien­za a mer­mar, si lle­ga al val­or cero la esce­na se reinicia.

Al entrar en la estación de regen­eración, la salud comien­za a aumen­tar has­ta lle­gar al val­or máximo.

habitación con varios modelos 3d en el centro se observa un cartel que dice "no olvides suscribirte"
Fig. 11: Val­or de salud luego de unos segun­dos en la estación de regeneración.

Conclusión

El obje­ti­vo de este artícu­lo y video cor­re­spon­di­ente es estu­di­ar una apli­cación del méto­do OnTrig­ger­Stay, para enten­der cómo fun­ciona y pos­te­ri­or­mente poder apli­car­lo a cualquier situación en la que pue­da ser útil.

Exis­ten muchas situa­ciones en las que este méto­do podría servir, por ejem­p­lo mod­e­lar el com­por­tamien­to de una pla­ca de pre­sión, hac­er que nos afecte una fuerza opues­ta a la gravedad que nos haga lev­i­tar si esta­mos en deter­mi­na­da región. En defin­i­ti­va este méto­do es una her­ramien­ta útil que ten­emos que entender.

No es el pun­to de este artícu­lo estu­di­ar el sis­tema de salud, pero es intere­sante obser­var que las esta­ciones van a actu­ar sobre cualquier GameOb­ject que cuente con el script Health­Sim­ple, inde­pen­di­en­te­mente de que se trate del jugador. Esto nos sug­iere que en nue­stro juego podríamos ten­er un solo script que admin­istre la salud de cualquier ser viviente de nue­stro juego y ten­ga propiedades comunes para todos, así como propiedades úni­cas para cada ser. Crear este tipo de solu­ciones es lo que me resul­ta más interesante

guest
0 Comments
Inline Feedbacks
View all comments
YouTube
Scroll al inicio
Secured By miniOrange