Tipo de proyecto:
Proyecto de la Universidad / Desarrollado en un equipo de 4 personas
Desarrollado en:
Unity 2021 / Programado en C#
Mi rol en el proyecto:
Programador general / Gameplay / UI
Menús 3D
Menú de inicio:
Menú de pausa / In Game:
Para Batalla Bolillera desarrollé el funcionamiento de dos menús en 3D simulando un cartel y una carta de menú, tanto para el inicio como durante el juego, estos cambian de UI al girar, ejecutando un Evento en su animación recibiendo un index según el botón pulsado para desplegar otra información, además contienen funciones básicas de un menú como un Toggle de pantalla completa, un Slider de volumen, una opción de Salir, y cuentan con algunas funciones específicas, como Reiniciar, Continuar, Créditos y Cómo jugar.
En esta parte se hace un Trigger al Animator pulsando un botón, recibiendo un index que determina si éste debe girar hacia la derecha o hacia la izquierda al continuar a otro apartado o al volver, después existen dos funciones que activan o desactivan el UI las cuales se llaman en un Evento de la animación.
En esta parte están declaradas funciones de Eventos que activan o desactivan el menú de inicio y opciones, las cuales se llaman al pulsar un botón en el menú de la carta que hace Trigger a la animación correspondiente para mostrar un nuevo UI y ocultar todos los elementos del anterior, en este caso para el menú de inicio y opciones.
Esta parte contiene funciones a dos Eventos en las animaciones, que corresponden a cuando el cartel gira para activar otro menú, y cuando regresa para reactivar el UI inicial, tomando el index establecido por los botones en uno local para saber que se debe activar o desactivar.
Esta parte contiene cuatro funciones de Eventos en las animaciones, que corresponden a cuando las hojas de la carta giran y activan o desactivan un menú nuevo y el anterior de donde viene la transición, ya que cada hoja tiene un menú anexado según sus caras.
Torres de defensa
Para Batalla Bolillera desarrollé el funcionamiento de tres torres de defensa, siendo un puesto de Elotes, de Tortas y de Tequila, cada una con sus propiedades y funciones dentro de la línea de defensa, siendo el puesto de Elotes la más rápida al atacar pero también la de menor daño y precio diseñada para atacar rápido y en un gran rango, el puesto de Tortas tiene un daño, velocidad y precio medio para concentrar el daño en un solo objetivo, y por último el puesto de Tequila que tiene la velocidad de ataque más lenta y el mayor precio, sin embargo, cuenta con un daño en área indispensable para acabar con grupos de enemigos.
Para su funcionamiento todas las torres de defensa cuentan con una función Update donde evalúan si tienen un objetivo, y si esto es verdadero realizan otras funciones, como rotar para mirar al objetivo, lanzar proyectiles mediante un Cooldown como un timer y activar la animación de la torre, por último si estas dejan de tener un objetivo regresan a su estado Idle buscando un nuevo objetivo.
Hay algunas de las funciones que se ejecutan en el Update de todas las torres para su funcionamiento, primero está la función DetectarEnemigo, que mediante el casteo de un Raycast en esfera detecta a los enemigos en un Layer y los convierte en su objetivo, ObjetivoEnRango es una función booleana que compara si el objetivo sigue dentro del alcance de la torre o no, RotarTorre realiza operaciones para mirar al enemigo mientras es atacado por la torre, y por último DispararElotes es la función que instancia los Prefabs de las balas que son dirigidas al objetivo.
La torre de Elotes y Tequila tienen una función Update donde comparan si aún tienen un objetivo, si éste es Null se autodestruyen, y si no lo es lo siguen mientras apuntan a su dirección y se acercan a el hasta llegar a la distancia mínima donde aplican su daño y son destruidas.
La torre de Tortas funciona diferente, primero al igual que las otras compara si tiene un objetivo, si tiene un objetivo sus proyectiles evalúan hacia donde debe dirigirse mediante una parábola calculada entre la torre y su objetivo, que al llegar a una velocidad golpea al enemigo.
La torre de Elotes y Tortas tienen un daño único a un objetivo, por lo que para aplicar el daño toman el Script del enemigo y llaman a función donde recibe el ataque, todas las balas al iniciar en la escena asignan su objetivo según el de la torre en la función Buscar.
La torre de Tequila funciona diferente, ya que tiene daño en área, debido a esto al momento de impactar con un enemigo genera un Overlap a todos los enemigos con un Tag en esa área para aplicarle el daño a todos, llamando su función de recibir daño.
Gestión de torres
Otras funciones de las torres de Batalla Bolillera son su mejora y venta, siendo la venta una opción para conseguir dinero en un momento desesperado, la venta devuelve al jugador el 50% del valor de la torre, mientras que la mejora se mantiene en un costo fijo para cada torre que aumenta su daño permanentemente para esa partida, la mejora es ilimitada ya que la dificultad del juego aumenta exponencialmente e igualmente de forma infinita, ambas operaciones se pueden realizar en cualquier momento de la partida.
Todas las torres comparten las mismas funciones de gestión, al venderla únicamente indica al nodo donde está colocada que fue destruida y la cantidad de Bolillos que obtendrá el jugador según el valor de la torre, al mejorar la torre compara si el jugador tiene la cantidad de Bolillos necesaria y entonces aplica una mejora en el daño de la torre. La última parte en la función OnMouseDown corresponde a las torres que al recibir un click despliegan u ocultan su UI para poder gestionarlas individualmente.
Enemigos y oleadas
Batalla Bolillera es un TD de oleadas infinitas, aumentando la dificultad en cada ronda, tanto en cantidad de enemigos como en variedad, apareciendo diferentes tipos de enemigos con estadísticas más altas como vida, velocidad, resistencia y ataque al Bolillo. Los enemigos aparecen en el mismo lugar hasta la oleada 10, donde empiezan a venir de cualquier zona lo que hace más difícil e interesante el juego incrementando cada vez más la cantidad de enemigos especiales que exigirán de una mejor defensa para detenerlos.
Los enemigos en Batalla Bolillera funcionan mediante NavMesh para dirigirse al Bolillo, avanzan hasta él por el camino y al estar a la distancia suficiente comienzan a comer el Bolillo, quitándole vida mientras se mantienen cerca.
La generación de enemigos sucede mediante una Corrutina, que aumenta el número de oleada y determina la cantidad de enemigos de la oleada multiplicando la cantidad de enemigos iniciales (3) por el número de oleada por un multiplicador de dificultad, después compara si se superó la ronda 10 y determina el punto de spawn de manera random e instancía la cantidad total de enemigos 1 a 1 cada 0.75 segundos, por último compara si debe spawnear enemigos de tiers más altos por cada 5 oleadas, la última función se encarga de crear a los enemigos en un punto determinado.