#1 Leer entradas. Métodos de la Clase Input [Serie Fundamental de Unity]

Introducción

En este artículo vamos a leer entradas del teclado y el mouse en Unity utilizando la clase Input de Unity. Esta clase también nos permite acceder a otros periféricos como joysticks, entradas táctiles, acelerómetro, giróscopo, entre otras señales de entrada.

Página principal del proyecto

Antes de empezar te invito a ver el siguiente video en el que se resuelve este problema:

Procedimiento

En el primer video vamos a trabajar en la estación de entradas, que consiste en modelos para las teclas “WASD” y botones del mouse.

El objetivo es lograr que cambien de color cuando la entrada correspondiente esté pulsada.

proyecto unity3d modelo 3d hecho en blender de las teclas wasd, un mouse y un cartel que dice input station
Fig. 1: Estación de entradas del GameDevLab.

En la jerarquía hay un GameObject llamado #1 Input. Este objeto tiene todos los elementos relacionados a la estación de entradas.

Fig. 2: Jerarquía. La estación de entradas es el GameObject llamado #1 Input.

Este GameObject tiene asignado el script Read Input, que será el encargado de leer las entradas y realizar las acciones sobre los elementos de la estación.

Fig. 3: Script Read Input asignado al GameObject #1 Input.

No es necesario hacer nada en la jerarquía. Vamos a la carpeta “Scripts to Complete”, “Video 1 – Read Inputs” y abrimos el script “ReadInput”.

ejemplo de script c# para unity 3d
Fig. 4: Script Read Input sin completar. El código faltante va en el método Update.

¿Por qué el código debe ir en el método Update?

Todos los Scripts que extienden su comportamiento de la clase MonoBehaviour tienen implícito el método Update, el cual se evalúa automáticamente en cada frame de nuestro juego.

Como se explica en el video, si nuestro juego funciona a 60 fps constantes, el método Update se ejecuta 60 veces por segundo.

La lectura de las entradas es un evento aleatorio, por lo tanto no podemos determinar en qué momento el jugador presionará un botón. Por esta razón, cuando necesitamos leer las entradas, debemos hacerlo en todos los frames.

¿Cómo hacemos la lectura de las entradas?

Imaginemos que podemos preguntar a la computadora en lenguaje coloquial por el estado de las entradas, ¿Qué preguntas le haríamos?

Preguntas simples como las siguientes.

Fig. 5: Preguntas que debemos hacer.

Si la respuesta a estas preguntas es si, ejecutaremos una acción apropiada para cada una.

Ya tenemos la idea, ahora solo tenemos que hacer estas preguntas utilizando un lenguaje que la computadora entienda.

Utilizando la sentencia if, podemos hacer preguntas cuya respuesta es verdadero o falso.

La clase Input de Unity se encarga de manejar las entradas, así que recurrimos a sus métodos para resolver el problema. Tenemos el método GetKey para las teclas y GetMouseButton para los botones del mouse, en el argumento de estos métodos indicamos la tecla utilizando el enum KeyCode y el botón del mouse usando enteros, como se observa en la figura 6.

Solución

Fig. 6: El código faltante está completo.

Con esto logramos que la estación de entradas cumpla su función.

proyecto unity3d modelo 3d hecho en blender de las teclas wasd, un mouse y un cartel que dice input station. la tecla w está en color verde
Fig. 7: Estación de entradas. Tecla W pulsada. 

proyecto unity3d modelo 3d hecho en blender de las teclas wasd, un mouse y un cartel que dice input station. la tecla a está en color verde
Fig. 8: Estación de entradas. Tecla A pulsada. 

proyecto unity3d modelo 3d hecho en blender de las teclas wasd, un mouse y un cartel que dice input station. el clic izquierdo está en color verde
Fig. 9: Estación de entradas. Clic izquierdo. 

proyecto unity3d modelo 3d hecho en blender de las teclas wasd, un mouse y un cartel que dice input station. el clic derecho está en color verde
Fig. 10: Estación de entradas. Clic derecho. 

Conclusión

Como primera conclusión me gustaría mencionar cómo pasamos de pensar el problema en lenguaje coloquial (figura 5), para luego escribirlo en lenguaje C# (figura 6). Pensar los problemas de esta forma resulta más simple, porque nos abstraemos del lenguaje de programación.
Un paso intermedio entre este lenguaje coloquial y el código C# sería el pseudocódigo.

Leer entradas es la forma que tenemos de saber qué quiere hacer el jugador, así que tenemos que definir qué entradas vamos a ofrecer y cuándo queremos leerlas (por ejemplo quizás no nos interesa leer las entradas WASD cuando mostramos una cinemática).

Los eventos de entrada son sucesos aleatorios, es por eso que debemos leerlos de manera continua utilizando el método Update.

Para evitar complicaciones es recomendable hacer la lectura de las entradas en un solo Script.

Puede haber otro tipo de entradas, como un JoyStick o entrada táctil. Debemos estudiar la clase Input de Unity para entender cómo manejarlas.

2 comentarios en “#1 Leer entradas. Métodos de la Clase Input [Serie Fundamental de Unity]”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *