Sistema de interacción base para Unity — Activar botones e interruptores

Introducción

Hoy les trai­go una solu­ción para que el jugador pue­da acti­var botones, inter­rup­tores, palan­cas y más en Unity.

La solu­ción con­siste en tres Scripts que inter­ac­túan entre sí para resolver la detec­ción de los ele­men­tos inter­ac­tivos y su acti­vación. Además se proveen dos Scripts extra a modo de ejem­p­lo para lograr lo que se obser­va en el sigu­iente video:

VÍDEOS DEL CANAL CON MÁS BÚSQUEDAS

DE UNITY

DE BLENDER

Hay dos videos para esta solu­ción, en la ver­sión exten­sa hago la descar­ga de los archivos de esta pági­na y con­fig­uro el sis­tema de inter­ac­ción des­de cero. En la ver­sión cor­ta expli­co de man­era breve qué archivos con­tiene el paque­te y cómo fun­ciona el sistema.

VERSIÓN CORTA

VERSIÓN DETALLADA

Es impor­tante men­cionar que en esta solu­ción no se resuelve ningu­na accion en par­tic­u­lar, si bien se proveen dos Scripts que ejem­pli­f­i­can la uti­lización, cada acción par­tic­u­lar deberá ser programada.

Descripción de los archivos de descarga

ÚLTIMA ACTUALIZACIÓN 04/03/20

Esta solu­ción con­siste en tres Scripts bási­cos: "Check­In­ter­ac­tion", "Inter­ac­tion­Re­ceiv­er" y "IAc­tion"

Basic Inter­ac­tion Sys­tem for First Per­son Character
Ver­sión:1.1
Pub­li­ca­do:abril 3, 2020
Sis­tema bási­co de inter­ac­ción 2D y 3D

Ver­sión:1.3
Pub­li­ca­do:abril 24, 2020

Check­In­ter­ac­tion se encar­ga de com­pro­bar si se está obser­van­do algo con lo que se puede inter­ac­tu­ar, se puede agre­gar a cualquier GameOb­ject pero es coher­ente colo­car­lo en nue­stro personaje.

Inter­ac­tion­Re­ceiv­er se colo­ca en todos los obje­to de nue­stro mun­do que el per­son­aje pue­da accionar, por ejem­p­lo botones, palan­cas, puer­tas, etc. Los obje­tos que ten­gan asig­na­do este Script debe ten­er tam­bién asig­na­do un Col­lid­er para que el Script Check­In­ter­ac­tion pue­da detecarlos.

IAc­tion es una inter­faz de pro­gra­mación, no se apli­ca sobre ningún GameOb­ject pero es nece­saria para la solu­ción y debe­mos prestar aten­ción a cómo usarla.

Se proveen dos Scripts que resuel­ven acciones a modo de ejemplo.

Extra: Interfaz gráfica

En el paque­te tam­bién viene la inter­faz grá­fi­ca sim­ple que se ve en el video y que per­mite mostrar men­sajes en pantalla.

Ejemplo de Aplicación — Activar botón en Unity

Aho­ra vamos a ver cómo usar esta solu­ción para poder acti­var un botón en Uni­ty y este abra un portón.

Para empezar par­ti­mos de una esce­na sim­ple en la que hay un botón y un portón. Estos dos obje­tos pueden ser reem­plaza­dos sim­ple­mente con cubos.

Personaje

Colo­camos en la esce­na el pre­fab­ri­ca­do FPSCon­troller de Stan­dard Assets, si no tenés el paque­te podés descar­gar­lo hacien­do clic acá.

A este pre­fab­ri­ca­do le vamos a asig­nar el Script Chequear­In­ter­ac­cion, el cam­po "min­In­ter­ac­tionDis­tance" es la mín­i­ma dis­tan­cia a la que tiene que estar el jugador para poder inter­ac­tu­ar con el obje­to, en mi caso pon­go 4. 

El cam­po "ori­gen­Rayo" es el pun­to des­de donde se orig­i­na el rayo para chequear la inter­ac­ción, en este caso colo­co la cámara del per­son­aje, de esa for­ma el per­son­aje podrá "ver" los obje­tos que estén en el cen­tro de la pantalla.

inspector del control en primera persona en unity, script para chequear interaccion y activar botones o interruptores en unity
Fig. 1: El Script Chequear­In­ter­ac­cion está asig­na­do al con­trol en primera persona.

Receptores — Botones o interruptores

Los obje­tos que se podrán accionar (como botones, inter­rup­tores, palan­cas, etc) ten­drán asig­na­do el Script "Recep­tor­In­ter­ac­cion", esto hará que el Script "Chequear­In­ter­ac­cion" detecte estos obje­tos y per­mi­ta accionar­los con la tecla E.

Podemos agre­gar un men­saje al recep­tor de inter­ac­ción y luego hac­er cosas con este men­saje, por ejem­p­lo mostrar­lo en un car­tel en pan­talla como se obser­va en el video, para esto hay una región mar­ca­do con comen­tar­ios en el Script Chequear­In­ter­ac­cion en la que se hace un Debug.Log mostran­do el men­saje en consola.

botones e interruptor en unity, como interactuar con objetos en unity
Fig. 2: El Script Recep­tor­In­ter­ac­cion está asig­na­do al obje­to con el que podemos inter­ac­tu­ar. Este obje­to tam­bién tiene asig­na­do el Script switch del ejemplo.

Objetos con acción

Cuan­do pulse­mos el botón van a ocur­rir dos cosas, la primera es que el portón se abrirá o se cer­rará depen­di­en­do de su esta­do actu­al, la segun­da acción es que el botón cam­bia a col­or verde cuan­do el portón está abier­to y a rojo cuan­do está cerrado.

Estas dos acciones las pro­gra­mamos indi­vid­ual­mente uti­lizan­do dos Scripts: Switch asig­na­do al GameOb­ject del botón (figu­ra 2) y Por­ton asig­na­do al GameOb­ject del portón (figu­ra 3).

inspector de un porton que se acciona en unity
Fig. 3: El portón tiene asig­na­do el Script portón que viene en las descar­gas a modo de ejemplo.

Scripts que resuelven las acciones

Las acciones deberán ser pro­gra­madas especí­fi­ca­mente, es decir deber­e­mos crear más Scripts que resuel­van la acción. Esto va a depen­der de las necesi­dades de cada uno.

En este artícu­lo vamos a ver los dos Scripts que resuel­ven la acción del botón y del portón.

El req­ui­si­to que deben ten­er los Scripts de acciones es que imple­menten la inter­faz de pro­gra­mación "IAc­tion" que viene en los archivos de descar­ga, esto hará que nue­stro Script deba ten­er definido oblig­a­to­ri­a­mente un méto­do lla­ma­do "Acti­vate", den­tro del cual hare­mos todo lo que tiene que hac­er la acción al ser acti­va­da por el receptor.

En las fig­uras 4 y 5 vemos ejem­p­los para el botón y para el portón. Segu­ra­mente haga videos expli­can­do cómo resolver más mecan­is­mos uti­lizan­do esta solu­ción y tam­bién es prob­a­ble que mejore­mos esta solución.

script para el comportamiento de un interruptor
Fig. 4: El Script Switch que viene como ejem­p­lo imple­men­ta la inter­faz Iaction.

script de unity para el comportamiento de un porton accionado a distancia
Fig. 5: El Script Por­ton que viene como ejem­p­lo imple­men­ta la inter­faz Iaction.

Asignar Acciones al receptor

Una vez que ten­emos las acciones pro­gra­madas, las asig­namos a los GameOb­jects que cor­re­spon­dan y selec­cionamos el obje­to que usamos como acti­vador de esas acciones (en este caso el botón).

En el Script Recep­tor­In­ter­ac­cion ten­emos un cam­po que se lla­ma "ObjectsWith­Ac­tions", el cual es un vec­tor de GameOb­jects en el que colo­care­mos todos los obje­tos que serán acti­va­dos al pul­sar el botón.

Los obje­tos que colo­que­mos aquí deben ten­er asig­na­do un Script que imple­mente IAc­tion para fun­cionar, en el val­or "Size" pon­go 2 y asig­no los GameOb­jects Por­ton y Boton, los cuales tienen asig­na­dos los Script Switch y Por­ton respec­ti­va­mente (ver fig­uras 3 y 6).

Fig. 6: En el recep­tor con­fig­u­ramos las acciones.

Con esto logramos que al pul­sar el botón el Script Recep­torAc­cion toma los obje­tos "Por­ton" y "Boton", obten­ga sus Scripts que imple­menten la inter­faz IAc­tion y les eje­cute a todos el méto­do Activate.

Conclusión

En este artícu­lo hemos vis­to cómo imple­men­tar la solu­ción prop­ues­ta para resolver la acti­vación de botones, inter­rup­tores o palan­cas en Unity.

La acción que realizarán los inter­rup­tores deberá ser resuelta de for­ma par­tic­u­lar con otro Script, el úni­co req­ui­si­to es que imple­mente la inter­faz IAc­tion y en con­se­cuen­cia se deba definir un méto­do públi­co lla­ma­do Activate.

1 comentario en “Sistema de interacción base para Unity — Activar botones e interruptores”

  1. Pingback: { Cómo mostrar mensajes en pantalla } - Solución para Unity

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Scroll al inicio
Secured By miniOrange