jairogarcíarincón

Movimiento de las raquetas


13.7K

Introducción



Como hemos comentado al inicio, las raquetas se deben mover hacia arriba y hacia abajo con el teclado, mientras que la bola se moverá en todas direcciones y sentidos y en función del lugar en el que rebote.

En ambos casos, debemos hacer uso de la programación. Para organizar lo archivos, primero de todo crea una nueva carpeta llamada Scripts dentro de Assets.

Unity provee una serie de comandos de entrada básicos, que puedes consultar haciendo clic en Edit > Project Settings > Input:

15. Input Manager


Por defecto, viendo el Vertical Axis vemos que podemos movernos arriba y abajo. con las flechas up/down o con W/S.

Como necesitamos dos jugadores, vamos a realizar unos cambios de modo que podamos utilizar S/W para uno y Up/Down para el otro:

  • Borra S y W de Alt Negative Button y Alt Positive Button, respectivamente.
  • Incrementa en 1 el Size de Axes para que aparezca uno nuevo (abajo del todo)
  • Renómbralo como Vertical 2.
  • Establece S y W como Negative Button y Positive Button, respectivamente.
  • Cambia el resto de valores apra que sean similares al al eje Vertical.
  • El resultado final debe ser similar a este:


16. Input Manager modificado


El script



Para configurar el movimiento de las raquetas, lo primero que necesitamos es crear, dentro de la carpeta Scripts, un New > C# Script con el nombre Raqueta:



Como sabes, por defecto se crean los métodos Start(), que se ejecuta automáticamente al inicio, y Update(), que se ejecuta cada frame (a un ritmo de 60fps). Ninguno de ellos devuelve valor alguno (void).

En vez de Update(), es posible utilizar FixedUpdate(), que se actualiza al mismo ritmo pero teniendo en cuenta las fuerzas físicas (cada fixed frame), con lo que es más adecuado y preciso elementos que se mueven.

El movimiento de la raqueta será solo arriba y abajo, y la siguiente imagen nos permite identificar que parámetros tenemos que modificar:

17. Direcciones del Vector2
Fuente: https://noobtuts.com/unity/2d-pong-game


Esto es, utilizaremos un Vector2 (un elemento con componentes x e y) en el que x siempre será 0 mientras que y valdrá 0 si está quieta, 1 si se mueve hacia arriba y -1 si se mueve hacia abajo.

Este valor lo multiplicaremos por una determinada velocidad o speed y lo actualizaremos cada fixed frame mientras se pulsen las teclas de movimiento vertical:



Como puedes ver en el código anterior, utilizamos variables privadas (el estándar es que sus nombres empiecen por un guión bajo) con la etiqueta [SerializeField] para poder acceder a ellas desde la Inspector window y modificarlas. El uso de variables y métodos privados siempre que sea posible hará que nuestro juego sea más seguro frente a posibles hackeos.

Por último, para que el comportamiento del script funcione, debemos asociar el script a las raquetas arrastrándolo a cada uno de ellas.

18. Script Raquetas


El problema es que las dos raquetas se mueven a la vez y solo funciona uno de los controles. Esto es debido a que hemos detectado solo el eje Vertical (y no el Vertical 2) y además no identificamos qué raqueta debemos mover.

Para resolverlo, realiza las siguientes modificaciones en el script:



Para terminar:

  • Selecciona la Raqueta Izquierda y en la Inspector window, escribe Vertical 2 como valor de la variable Eje del script
  • Selecciona la Raqueta Derecha y en la Inspector window, escribe Vertical como valor de la variable Eje del script


19. Raqueta Izquierda


Ahora ye deberías tener las dos raquetas funcionando cada una con sus controles.


Publicado el 05 de Febrero de 2025

Unity2dPong