jairogarcíarincón
Introducción
Puesto que la bola se moverá en todas direcciones y sentidos y en función del lugar en el que rebote, tendríamos que calcular, en cada rebote, el ángulo de incidencia para determinar con qué ángulo debe salir rebotada.
No obstante, Unity provee de elementos que se encargan de realizar esta tarea por nosotros, como es el caso del Physics Material 2D, que nos permitirán ajustar la fricción y el rebote que se produce entre objetos 2D que colisionan.
El material 2D
- Dentro de la carpeta Materials, clic derecho Create > Physics Material 2D y llámalo MaterialBola.
- En la Inspector window, ajusta Friction a 0 y Bounciness a 1.
- Selecciona la Bola en la Hierarchy window y asígnale MaterialBola como Material del Box Collider 2D.
De esta forma, la bola rebotará cuando encuentre cualquier elemento con el que colisionar.
El script
Dentro de la carpeta Scripts, crea un nuevo C# script llamado Bola que controlará el comportamiento de nuestra bola.
Puesto que el componente MaterialBola se va a encargar de los rebotes, lo único que debemos hacer es inicializar la bola con una velocidad y dirección determinadas...
...y asociar el script Bola a nuestro objeto Bola.
El ángulo de colisión bola - raqueta
Con esto ya tenemos nuestra bola rebotando, si bien ahora necesitaríamos detectar en qué punto de la raqueta rebota la bola para asignar el ángulo adecuado.
Según estas dos imágenes, vemos que para calcular la velocidad de la bola:
- El valor de x será -1 si la bola rebota en la raqueta derecha
- El valor de x será 1 si la bola rebota en la raqueta izquierda
- El valor de y será 1 si la bola rebota en la parte superior de la raqueta
- El valor de y será 0 si la bola rebota en la parte central de la raqueta
- El valor de y será -1 si la bola rebota en la parte inferior de la raqueta
Entonces ¿Cómo calculo en qué punto ha rebotado?. Unity provee, para los objetos con un Box Collider 2D, el uso de la función OnCollisionEnter2D, que nos da información sobre el punto de colisión y el elemento con el que se ha colisionado.
De esta forma, podemos calcular la velocidad de la Bola si calculamos en qué posición está respecto de la raqueta, o lo que es lo mismo:
- Si la coordenada Y de la bola es mayor que la de la raqueta, rebota hacia arriba.
- Si la coordenada Y de la bola es igual que la de la raqueta, rebota de frente.
- Si la coordenada Y de la bola es menor que la de la raqueta, rebota hacia abajo.
Para ello añadiremos al script Bola una función dedicada a la que llamaremos desde OnCollisionEnter2D y otra de ayuda para calcular la dirección de salida en y llamada direccionY:
Con esto ya tendríamos el juego funcionando, si bien todavía nos faltaría añadirle algunas cosas, tales como:
- Detectar los goles y reiniciar la posición de la bola
- Contabilizar y mostrar los goles
- Añadir sonidos
- Ir aumentando la velocidad de la bola con el tiempo
- Añadir una pantalla de inicio
- Modificar el juego para que gane el que meta 5 goles o el que meta más goles en 3 minutos (con una cuenta atrás) y volver a la pantalla de inicio al terminar con un mensaje
- Modificar la pantalla de inicio para escoger entre tiempo y número de goles
Publicado el 05 de Febrero de 2025
Unity2dPong