#12 Interacciones en Unity. Personaje-Puertas. [Laberinto en Primera Persona]

Información actualizada sobre esta entrada

Este artícu­lo pertenece a una serie que con­siste en hac­er un juego sim­ple en primera per­sona acer­ca de encon­trar obje­tos den­tro de un laber­in­to. Es una de mis primeras series de cuan­do empecé el canal, aho­ra he mejo­ra­do mucho este proyec­to y puedes descar­gar el códi­go fuente para impor­tar­lo en tu pro­pio proyec­to de Uni­ty. Algún día vamos a hac­er un remake de esta serie, suscrí­bete a mi canal para estar al tan­to del nue­vo con­tenido sobre Blender, Uni­ty y pro­gra­mación.

Sígueme en itch.io y descarga el código fuente de este proyecto

PUEDES TESTEAR ESTE JUEGO AQUÍ. TAL VEZ TARDE UN POCO EN CARGAR
🔻

MOVEMENT: WASD CAMERA LOOK: MOUSE

Introducción al artículo original

En este artícu­lo vamos a ver una for­ma de resolver las inter­ac­ciones en Uni­ty entre el jugador y obje­tos como la puer­ta o el pedestal que con­tiene la espada.

Para ello hare­mos uso del méto­do Ray­Cast que nos per­mi­tirá trazar rayos des­de el jugador a la posi­ción a donde está miran­do y exam­i­nar con­tra qué chocan esos rayos.

Página principal del proyecto

Vídeo relacionado a este artículo

Inter­ac­ciones en Uni­ty entre el per­son­aje y las puertas

¿Quieres más Uni­ty? En mi canal hay un mon­tón! 👀

Ver la PLAYLIST DE UNITY

SUSCRÍBETE! Te ase­guro que encon­trarás var­ios vídeos útiles 💪 

Actual­mente he crea­do una mejor ver­sión del sis­tema de inter­ac­ción que está basa­da en la que hace­mos aquí.

Ver el nuevo sistema de interacción

Archivos de descarga

My first game in Uni­ty — Video 12 Files

¿Qué vamos a hacer en este artículo?

Vamos a comen­zar colo­can­do fuego sobre las antor­chas de las puer­tas, para ello vamos a usar uno de los pre­fab­ri­ca­dos de Stan­dard Assets.

antorcha ardiendo en unity, prefab de standard assets
Fig. 1: Vamos a hac­er que las antor­chas estén encendidas.

El obje­ti­vo prin­ci­pal es hac­er que el jugador sea capaz de inter­ac­tu­ar con las puer­tas y con el pedestal, esto lo resolver­e­mos uti­lizan­do traza­do de rayos y analizar con­tra qué chocan esos rayos.

al acercarnos a un portal en el juego en unity aparece un mensaje informando el estado
Fig. 2: Al acer­carnos a la puer­ta nos infor­mará si podemos irnos o aún debe­mos cumplir el objetivo.

al acercarnos al pedestal en el juego en unity aparece un mensaje informando que podemos interactuar
Fig. 3: Al acer­carnos el pedestal nos aparece un men­saje indi­can­do que podemos interactuar.

Importar archivos y configuración

Comen­zamos descar­gan­do y extrayen­do el archi­vo pro­por­ciona­do más arri­ba. En la figu­ra 4 se obser­van los archivos que vienen en el paquete.

assets varios para juego en unity
Fig. 4: Archivos que vienen en el ZIP.

Selec­cionamos estos archivos y los lle­va­mos arras­tramos hacia la ven­tana de Unity.

assets varios importados en unity
Fig. 5: Lle­va­mos los archivos extrai­dos a Unity.

Luego creamos todas las car­petas nece­sarias para orga­ni­zarnos de acuer­do a nues­tras necesidades.

carpetas en projecto de juego de laberinto en unity
Fig. 6: Vamos a crear una car­pe­ta para las fuentes de texto.

Vamos a mod­i­ficar el sonido de las pisadas del pre­fab first per­son con­troller de Stan­dard Assets, reem­plazan­do los sonidos con los que vienen en el paquete.

componentes de script first person controller de standard assets en el inspector de unity
Fig. 7: Selec­cionamos el pre­fab del per­son­aje y vamos al final del Script donde están asig­na­dos los sonidos de pisadas.

sonidos de pisadas para aplicar a control en primera persona en unity
Fig. 8: Bus­camos los nuevos sonidos importados.

Los llamé de la mis­ma for­ma que los sonidos de Stan­dard Assets, pero en la figu­ra 9 los sonidos que están apli­ca­dos son los que vienen en la descar­ga. Además elim­iné los sonidos de salto y aterrizaje.

componentes de script first person controller de standard assets en el inspector de unity
Fig. 9: Asig­namos los nuevos sonidos y elim­i­namos los otros dos.

Fondo para los textos

Aho­ra vamos a aplicar la fuente que viene en el paque­te a los tex­tos de la inter­faz grá­fi­ca. Selec­cionamos el GameOb­ject Timer que tiene asig­na­do un com­po­nente Text, en la figu­ra 11 vemos que la fuente asig­na­da es Arial.

jerarquia de un proyecto de juego de laberinto en unity
Fig. 10: Selec­cionamos el gameob­ject Timer de la jer­ar­quía, crea­do anteriormente.

componente texto de un gameobject en unity
Fig. 11: En el inspec­tor vamos a mod­i­ficar la fuente están­dar por la que viene en el paquete.

Hace­mos clic sobre el pun­to a la derecha de Ari­al para selec­cionar una nue­va fuente.

En mi caso voy a usar "aka­Pos­t­ley" que es la fuente que sue­lo uti­lizar cuan­do hago videil­los para el canal. Pero si lo pre­fieren pueden bus­car su propia fuente o inclu­so crear una personalizada. 

seleccion de fuente en unity
Fig. 12: En la ven­tana emer­gente selec­cionamos la fuente.

Dejo unos enlaces a pági­nas donde se pueden con­seguir fuentes:

Da Font

1001 Fonts

Luego elegi­mos el col­or, en mi caso sim­ple­mente voy a ele­gir blanco.

seleccion de color en unity
Fig. 13: Tam­bién elegi­mos un col­or para la fuente, en mi caso será blan­co para que con­traste con el fondo.

En la figu­ra 14 vemos cómo se ve el timer con los cam­bios mencionados.

temporizador en unity, timer
Fig. 14: Nue­va fuente y col­or para el temporizador.

Lo sigu­iente que vamos a hac­er es crear un fon­do para el tex­to del tem­po­rizador. Selec­cionamos el GameOb­ject Timer y creamos un obje­to imagen.

jerarquia de un proyecto de juego de laberinto en unity
Fig. 15: Creamos una ima­gen para hac­er el fon­do del timer.

assets varios importados en unity
Fig. 16: Selec­cionamos la ima­gen que impor­ta­mos del zip.

Ubi­camos la ima­gen de fon­do que se obser­va en la figu­ra 16, la selec­cionamos y vamos a con­fig­u­rar­la como una tex­tu­ra tipo Sprite.

configuracion de tipo de textura en unity
Fig. 17: En el inspec­tor vamos a selec­cionar como tipo de tex­tu­ra Sprite, para que ten­ga transparencia.

Con esta con­fig­u­ración la ima­gen de fon­do tiene trans­paren­cia. Arras­tramos la tex­tu­ra al cam­po source image de la com­po­nente imagen.

assets varios importados en unity
Fig. 18: Aho­ra vemos que la ima­gen tiene transparencia.

componente imagen de un gameobject en unity
Fig. 19: Apli­camos la tex­tu­ra a la ima­gen que usare­mos de fon­do del timer.

Mod­i­fi­camos el resto de parámet­ros a gus­to, en la figu­ra 20 se ve la con­fig­u­ración que elegí.

gameobject imagen en unity
Fig. 20: Con­fig­u­ramos la ima­gen de fon­do a gus­to, estos son mis valores.

En la figu­ra 21 se obser­va que las letras en lugar de ser blan­cas se ven teñi­das con el col­or de la ima­gen de fon­do. Esto se debe a que la ima­gen se está ren­der­izan­do por enci­ma del texto.

Para solu­cionar este prob­le­ma debe­mos colo­car la ima­gen de fon­do más arri­ba en la jer­ar­quía, en la figu­ra 22 se ve el orden de los GameOb­jects y en la figu­ra 23 el resul­ta­do del cambio.

temporizador en unity, timer
Fig. 21: Los números no se ven blan­cos porque la ima­gen está por delante del texto.

jerarquia de un proyecto de juego de laberinto en unity
Fig. 22: Para cor­re­gir el prob­le­ma vamos a la jer­ar­quía y cam­bi­amos de orden los GameObjects.
temporizador en unity, timer
Fig. 23: Aho­ra los números del Timer están por delante de la ima­gen de fondo.

Crear fuego para las antorchas

Hace­mos doble clic sobre algún GameOb­ject de la puer­ta en la jer­ar­quía, con esto cen­traremos la cámara sobre una de ellas.

objeto puerta en unity
Fig. 24: Selec­cionamos una de las puer­tas en la jerarquía.

Ubi­camos el pre­fab­ri­ca­do Fire­Mo­bile de Stan­dard Assets, en la figu­ra 25 se ve la ruta donde se encuentra.

sistemas de particulas prefabricados en unity
Fig. 25: Vamos a la car­pe­ta Par­ti­cle Sys­tems de Stan­dard Assets y elegi­mos el pre­fab Fire Mobile.

Tomamos el pre­fab­ri­ca­do y lo arras­tramos a la jer­ar­quía como hijo de la puerta.

objeto puerta en unity
Fig. 26: Arras­tramos el pre­fab­ri­ca­do Fire Mobile y lo hace­mos hijo de la puerta.

Cuan­do selec­cionamos el pre­fab­ri­ca­do en la jer­ar­quía podemos ver que se sim­u­la el sis­tema de partícu­las en la ven­tana Scene.

sistema de particulas para simular fuego en unity
Fig. 27: Así se ve el pre­fab­ri­ca­do Fire Mobile.

En la figu­ra 28 vemos la con­fig­u­ración que util­icé para el sis­tea de partícu­las, bási­ca­mente dis­min­uí un poco el tamaño.

configuracion de sistema de particulas en unity
Fig. 28: Con­fig­u­ramos los parámet­ros del sis­tema de partículas.

Uti­lizan­do las vis­tas colo­camos el fuego en la pun­ta de la antorcha.

sistema de particulas para simular fuego en unity
Fig. 29: Posi­cionamos el fuego sobre la antor­cha usan­do las vis­tas frontal y lateral.

sistema de particulas para simular fuego en unity
Fig. 30: Posi­cionamos el fuego sobre la antor­cha usan­do las vis­tas frontal y lateral.

Luego hare­mos dos copias del obje­to, una para la antor­cha que se encuen­tra en el lado dere­cho de la puer­ta y otro para la antor­cha que se encuen­tra var­ios met­ros por enci­ma de la puerta.

sistema de particulas para simular fuego en unity
Fig. 31: Dupli­camos el fuego y lo colo­camos sobre la otra antorcha.

sistema de particulas para simular fuego en unity
Fig. 32: Volve­mos a duplicar el fuego y lo lle­va­mos a la pun­ta de la antor­cha que está sobre la puerta.

El propósi­to de esta últi­ma antor­cha es que se vea des­de dis­tin­tas partes del laberinto.

sistema de particulas para simular fuego en unity
Fig. 33: Esta lla­ma será vis­i­ble des­de dis­tin­tos pun­tos del laberinto.

Cuan­do ter­mi­namos de tra­ba­jar en la puer­ta apli­camos los cam­bios para que se extien­dan a las demás puertas.

inspector de un gameobject en unity
Fig. 34: Volve­mos a selec­cionar el obje­to puer­ta y apli­camos los cam­bios para que se extien­dan a las demás puertas.

Programar comportamiento — Scripts

En esta ocasión vamos a crear tres Scripts que lla­mare­mos: "Gate", "Pedestal" y "UIMan­ag­er".

El Script Gate se encar­gará de mod­e­lar el com­por­tamien­to de la puer­ta, el Script Pedestal se encar­gará del pedestal que con­tiene la espa­da y nos per­mi­tirá remover­la. Y el Script UIMan­ag­er se encar­gará de mod­i­ficar los ele­men­tos de la inter­faz gráfica.

scripts c sharp en unity
Fig. 35: Creamos tres nuevos Scripts lla­ma­dos Gate, Pedestal y UIManager.

Selec­cionamos una puer­ta y le asig­namos el Script Gate, luego apli­camos los cam­bios para las demás puertas.

asignacion de script c sharp a gameobject en unity
Fig. 36: El Script Gate lo asig­namos al GameOb­ject Gate y apli­camos los cambios.

Ubi­camos el pre­fab­ri­ca­do del pedestal con la espa­da y lo seleccionamos.

assets varios importados en unity
Fig. 37: Selec­cionamos el pre­fab­ri­ca­do del pedestal.

Asig­namos el Script Pedestal a este GameOb­ject. Si es nece­sario podemos blo­quear la ven­tana inspec­tor con el can­da­di­to que se obser­va en la esquina supe­ri­or derecha en la figu­ra 38. Tam­bién podemos colo­car el pre­fab­ri­ca­do en la jer­ar­quía, asig­narle el Script, aplicar los cam­bios y elim­i­nar el GameOb­ject de la jerarquía.

asignacion de script c sharp a gameobject en unity
Fig. 38: Al pedestal le asig­namos el Script Pedestal.

Selec­cionamos el GameOb­ject Con­trol y le asig­namos el Script UIManager.

jerarquia de un proyecto de juego de laberinto en unity
Fig. 39: Selec­cionamos el obje­to con­trol de la jerarquía.

asignacion de script c sharp a gameobject en unity
Fig. 40: Al obje­to Con­trol le asig­namos el Script UIManager.

Completar Scripts

Vamos a comen­zar adap­tan­do lo que teníamos resuel­to de la inter­faz grá­fi­ca al nue­vo obje­to UIMan­ag­er que se va a encar­gar de con­tro­lar lo que se mues­tra en pantalla.

Entramos en el Script Timer y selec­cionamos los méto­dos que se obser­van en la figu­ra 41, luego vamos al Script UIMan­ag­er y los pegamos.

script c sharp en unity para resolver la interaccion del personaje con objetos
Fig. 41: Abri­mos el Script Timer, selec­cionamos estas instruc­ciones y las cortamos.

script c sharp en unity para resolver la interaccion del personaje con objetos
Fig. 42: Abri­mos el Script UIMan­ag­er y peg­amos las instruc­ciones cor­tadas del Timer.

Tam­bién nos lle­va­mos la defini­ción de los cam­pos nece­sar­ios, por ejem­p­lo timer­Text que es la ref­er­en­cia del tex­to del temporizador.

script c sharp en unity para resolver las interacciones en unity del personaje con objetos
Fig. 43: Tam­bién nos lle­va­mos de Timer los obje­tos necesarios.

script c sharp en unity para resolver las interacciones en unity del personaje con objetos
Fig. 44: Peg­amos los obje­tos cor­ta­dos de Timer e impor­ta­mos el name­space UnityEngine.UI.

Cuan­do colo­camos el cam­po timer­Text en UIMan­ag­er dejamos de ten­er el error en el méto­do WriteTimer.

script c sharp en unity para resolver las interacciones en unity del personaje con objetos
Fig. 45: Debe­mos hac­er públi­co el méto­do Write­Timer porque lo eje­cutare­mos des­de un con­tex­to externo.

Aho­ra ten­emos un error en el Script Timer porque inten­ta­mos eje­cu­tar el méto­do Write­Timer, el cual ya no está definido en este Script. Para resolver el prob­le­ma vamos a definir un obje­to tipo UIMan­ag­er y encon­trar la ref­er­en­cia en el méto­do Start, como se obser­va en la figu­ra 46.

script c sharp en unity para resolver las interacciones en unity del personaje con objetos
Fig. 46: En el Script Timer defin­i­mos un obje­to tipo UIMan­ag­er y encon­tramos la ref­er­en­cia en el méto­do Start.

Luego all lla­ma­do del méto­do Write­Timer le anteponemos la ref­er­en­cia del obje­to UIMan­ag­er y el oper­ador pun­to, indi­can­do que esta­mos que­rien­do eje­cu­tar el méto­do Write­Timer definido en el obje­to UIManager.

script c sharp en unity para implementar temporizador
Fig. 47: Para eje­cu­tar el méto­do Write­Timer debe­mos antepon­er la ref­er­en­cia del obje­to UIManager.

No nece­si­ta­mos que el Script Timer ten­ga el name­space UnityEngine.UI (pre­vi­a­mente definido en la línea 4 del Script Timer, figu­ra 48), así que elim­i­namos el "using UnityEngine.UI".

script c sharp en unity para implementar temporizador
Fig. 48: Ya no se nece­si­ta el name­space UnityEngine.UI en el Script Timer. Además elim­i­namos los obje­tos innecesarios.

Cuan­do voy a la con­so­la me encuen­tro con un error, figu­ra 49 en rojo. Nos dice que el prob­le­ma está en el Script Timer, en la línea 22.

Si obser­va­mos la figu­ra 48 vemos que el prob­le­ma está en la eje­cu­ción del méto­do GetComponent<UIManager>, faltó abrir y cer­rar paréntesis.

error en script c sharp en unity
Fig. 49: En con­so­la aparece un error en el Script Timer.

En la figu­ra 50 hemos resuel­to el problema.

correccion de error en script c sharp en unity
Fig. 50: El prob­le­ma era la ausen­cia de parén­te­sis en la eje­cu­ción del méto­do GetComponent.

Lo sigu­iente que hace­mos es asig­nar el tex­to del tem­po­rizador al cam­po Timer­Text en el inspec­tor del GameOb­ject Control.

inspector de un gameobject en unity
Fig. 51: Asig­namos el tex­to del timer en el UIManager.

Script GameControl

Para con­tro­lar las inter­ac­ciones entre el per­son­aje y los obje­tos del esce­nario vamos a definir algunos cam­pos y méto­dos en el Script Game­Con­trol que se encar­garán de hac­er el traza­do de rayos y analizar las colisiones.

En la figu­ra 52 vemos los nuevos cam­pos entre el comen­tario "//Video 12" y el méto­do Start.

script c sharp en unity para control un juego de laberinto y resolver las interacciones entre el personaje y los objetos del escenario
Fig. 52: Defin­i­mos estos cam­pos en el Script GameControl

Vamos a definir el méto­do Check­Ray­cast que eje­cutare­mos al final del méto­do Update, como vemos en la figu­ra 53.

script c sharp en unity para control un juego de laberinto y resolver las interacciones entre el personaje y los objetos del escenario
Fig. 53: Defin­i­mos el méto­do Check­Ray­cast y lo eje­cu­ta­mos en Update.

Script Pedestal

En el Script Pedestal vamos a escribir lo que se ve en la figu­ra 54.

Definire­mos un GameOb­ject Sword para la ref­er­en­cia de la espa­da que está en el pedestal y un AudioSource para que el pedestal emi­ta sonido cuan­do reti­ramos la espada.

Luego ten­emos el méto­do públi­co RemoveSword que eje­cutare­mos cuan­do el per­son­aje esté lo sufi­cien­te­mente cer­ca del pedestal, esté apun­tan­do hacia la espa­da y pre­sione la tecla E.

script c sharp en unity para controlar el pedestal en el juego del laberinto
Fig. 54: En el Script Pedestal defin­i­mos estos cam­pos y métodos.

Selec­cionamos el pre­fab del Pedestal y uti­lizan­do Add Com­po­nent agreg­amos un com­po­nente AudioSource.

componente audio source de un gameobject en unity
Fig. 55: Agreg­amos una fuente de audio al pedestal

Ubi­camos el audio "Steel" que venía den­tro del paque­te y lo apli­camos al com­po­nente AudioSource del pedestal, tam­bién des­mar­camos la casil­la "Play On Awake" y move­mos el Slid­er "Spa­cial Blend" a 3D.

assets varios importados en unity
Fig. 56: Selec­cionamos el sonido Steel que viene en el zip descargado.

componente audio source de un gameobject en unity
Fig. 57: Asig­namos el sonido de acero en el com­po­nente AudioSource del pedestal.

Vamos a colo­car el pre­fab­ri­ca­do del pedestal en la jerarquía.

jerarquia de un proyecto de juego de laberinto en unity
Fig. 58: Colo­camos el pedestal en la jerarquía.

Selec­cionamos el GameOb­ject Sword que se ve en la figu­ra 58 (puede que ten­ga la nom­bre Espa­da) y lo lle­va­mos al cam­po "Sword" del Script Pedestal. De esta for­ma cuan­do eje­cute­mos el méto­do RemoveSword, este GameOb­ject es el que se desactivará.

inspector de un gameobject en unity
Fig. 59: Asig­namos el GameOb­ject de la espa­da al Script Pedestal.

Mensajes de interacciones del Jugador

Vamos al Script UIMan­ag­er y defin­i­mos los cam­pos nece­sar­ios para mostrar las posi­bles inter­ac­ciones entre el per­son­aje y los ele­men­tos del escenario.

Vamos a definir un GameOb­ject que será el con­tene­dor del men­saje, es decir cuan­do lo desac­tive­mos no se mostrará en pan­talla y cuan­do lo active­mos si. Un Text que será el com­po­nente tex­to del mensaje.

script c sharp en unity para controlar la interfaz grafica del juego del laberinto y mostrar las interacciones entre el personaje y los objetos del escenario
Fig. 60: Defin­i­mos estos nuevos cam­pos en el Script UIManager.

Defin­i­mos los méto­dos ShowMes­sage y ClearMes­sage, el primero tomará como parámetro un String que es el men­saje que se debe mostrar. El segun­do no lle­va parámet­ros y sim­ple­mente se encar­ga de ocul­tar el GameOb­ject que con­tiene al mensaje.

script c sharp en unity para controlar la interfaz grafica del juego del laberinto y mostrar las interacciones entre el personaje y los objetos del escenario
Fig. 61: Defin­i­mos estos nuevos méto­dos en el Script UIManager.

Aho­ra vamos a crear el ele­men­to de la inter­faz grá­fi­ca que mostrará los men­sajes de interacciones.

Comen­zamos cre­an­do una ima­gen que actu­ará de fon­do y luego, como hijo, un obje­to tex­to. En la figu­ra 62 vemos estos dos obje­tos lla­ma­dos "Mes­sage­Back­ground" y "Mes­sage­Text".

jerarquia de un proyecto de juego de laberinto en unity, el mensaje muestra las posibles interacciones entre el personaje y los objetos del escenario
Fig. 62: Creamos una ima­gen para usar como fon­do del men­saje de inter­ac­ción. Luego un tex­to como hijo.

Con­fig­u­ramos todos los parámet­ros visuales has­ta que quede como nos guste, en mi caso en la figu­ra 63 vemos el resultado.

interfaz grafica simple del juego del laberinto en unity que muestra las interacciones entre el jugador y los objetos del escenario
Fig. 63: Con­fig­u­ramos todo a gus­to, este fue mi resultado.

Vamos al GameOb­ject Con­trol y arras­tramos los obje­tos a los nuevos cam­pos definidos en UIManager.

el ui manager va a reflejar las interacciones entre el jugador y los objetos mostrando mensajes en pantalla
Fig. 64: Asig­namos los nuevos obje­tos a la com­po­nente UIMan­ag­er del obje­to Control.

Luego me di cuen­ta de que es más direc­to seri­alizar el com­po­nente Text en lugar del GameOb­ject que con­tiene el Text, así que como se ve en la figu­ra 65, comen­té la línea en la que se define el GameOb­ject "mes­sage­TextGameOb­ject" y le agregué Seri­al­ize­Field al Text "mes­sage­Text".

script c sharp en unity para controlar la interfaz grafica del juego del laberinto
Fig. 65: Mod­i­fi­camos de esta for­ma los cam­pos de UIManager.

Esto nos mod­i­fi­ca los cam­pos que se ven en el inspec­tor, arras­tramos nue­va­mente los obje­tos necesarios.

inspector de un gameobject en unity
Fig. 66: Volve­mos a asig­nar los obje­tos a UIManager.

Tam­bién com­ple­ta­mos los cam­pos nuevos del com­po­nente GameControl.

La dis­tan­cia mín­i­ma de inter­ac­ción será 4 met­ros. El men­saje de inter­ac­ción que se mues­tra cuan­do miramos una puer­ta pero aún no ten­emos la espa­da será:

"This gate is cur­rent­ly locked. You have to find the sword first."

El men­saje que nos indi­ca que podemos inter­ac­tu­ar dirá:

"Press E to interact."

componente gamecontrol para controlar el juego del laberinto en unity, entre los parametros se encuentran los mensajes de las posibles interacciones entre el jugador y los objetos del escenario
Fig. 67: Com­ple­ta­mos los cam­pos del com­po­nente GameControl.

Resolver Raycasting

Para iden­ti­ficar qué obje­tos ten­emos en frente, lo que vamos a hac­er es crear un rayo des­de el cen­tro de la cámara en la direc­ción en la que está vien­do el personaje. 

Este rayo puede chocar con un obje­to que ten­ga Col­lid­er o irse al infini­to. Si resul­ta que choca con algún obje­to, vamos a fijarnos si la dis­tan­cia que hay ente el per­son­aje y el obje­to es menor a la dis­tan­cia de inter­ac­ción. Si esto se cumple vamos a inten­tar obten­er del obje­to una com­po­nente Gate o una com­po­nente Pedestal. Si el obje­to no tiene ningu­na de estas dos com­po­nentes (por ejem­p­lo un muro o el sue­lo), en las vari­ables van a estar en null.

Si en cam­bio la vari­able que con­tiene el obje­to Gate es dis­tin­ta de null, quiere decir que esta­mos miran­do a la puer­ta a una dis­tan­cia menor que la de inter­ac­ción, por lo tan­to podríamos inter­ac­tu­ar con la puerta.

Esta es la escen­cia de la solu­ción escri­ta en la figu­ra 68 para el méto­do CheckRaycast.

metodo check raycast para resolver la interaccion entre el personaje y objetos del escenario en el juego del laberinto en unity
Fig. 68: Méto­do Check­Ray­cast para resolver la inter­ac­ción del per­son­aje con los obje­tos del escenario.

Si el per­son­aje está miran­do el pedestal a una dis­tan­cia menor a la de inter­ac­ción vamos a com­pro­bar si pre­siona la tecla E, si esto pasa eje­cutare­mos el méto­do removeSword de pedestal y pon­dremos en true la vari­able sword­Found, para indicar que el per­son­aje encon­tró la espada.

Como detalle final ponemos la vari­able sword­Found en false en el méto­do Start.

metodo start del script game control para controlar el juego del laberinto en unity y resolver las posibles interacciones entre el jugador y los objetos del escenario
Fig. 69: En el méto­do Start hace­mos la fal­sa la vari­able swordFound.

En las fig­uras 70 y 71 podemos ver el resul­ta­do de lo que estu­vi­mos hacien­do a lo largo de ese artículo.

interacciones que se muestran cuando el personaje se acerca a un objeto en el juego del laberinto en unity
Fig. 70: Al acer­carnos a la puer­ta nos aparece el men­saje indi­ca­do en el com­po­nente GameControl.

interacciones que se muestran cuando el personaje se acerca a un objeto en el juego del laberinto en unity
Fig. 71: Al acer­carnos al pedestal y apun­tar a la espa­da nos aparece el men­saje de inter­ac­ción que indicamos.

Conclusión

En este artícu­lo hemos vis­to cómo resolver inter­ac­ciones entre el per­son­aje y cier­tos ele­men­tos del escenario.

Para esto uti­lizamos el méto­do Ray­Cast de la clase Physics, que se encar­ga de trazar un rayo des­de donde le indique­mos y en la direc­ción que le demos y entre­ga una vair­bale booleana si resul­ta que ese rayo ha choca­do con­tra algo.

Cuan­do sabe­mos que el rayo ha choca­do con­tra algo, ver­i­fi­camos que la dis­tan­cia a ese pun­to sea una dis­tan­cia razon­able en la cual el jugador pue­da inter­ac­tu­ar con un objeto.

Luego fue nece­sario deter­mi­nar si el obje­to con­tra el que el rayo choca es una puer­ta, un pedestal u otro obje­to. Esto lo logramos inten­tan­do obten­er las ref­er­en­cias de alguno de los Scripts que nos intere­san y que podrían estar asig­nadas al obje­to con­tra el que el rayo chocó.

Esto es una for­ma que se me ocur­rió en la que se puede resolver las inter­ac­ciones entre el jugador y dis­tin­tos ele­men­tos del esce­nario. Me gus­taría crear una solu­ción mejor y con más posi­bil­i­dades, luego de escribir este artícu­lo he ido pen­san­do nuevas ideas, así que posi­ble­mente haga otros artícu­los sobre esto más adelante.

Scroll al inicio
Secured By miniOrange