Juego Robot Fight

Link

https://play.unity.com/en/games/ccd89a89-07d4-46ef-8eea-82f68caec39c/robot-fight

Introducción

El presente proyecto tiene como objetivo el desarrollo de un juego de lucha entre dos robots animados, empleando el motor Unity y utilizando máquinas de estados, Animator Controllers  y transiciones entre animaciones. Durante las prácticas previas se prepararon los modelos y las animaciones en formato FBX, incluyendo los estados Idle, Walk, Attack, Defend y Death. En esta última entrega se integraron todas las animaciones, se diseñó la lógica de control de los personajes, la detección de colisiones y los sistemas complementarios de interfaz, sonido, menú, cámara y fin de partida. El resultado es un prototipo jugable completamente funcional, con dos personajes controlables, animaciones coherentes, efectos de sonido, música de fondo, sistema de vida, menú principal y pantalla de victoria.

Desarrollo del Juego

  • Integración de las animaciones: Para las animaciones se configuraron dos Animator Controllers independientes, uno para cada robot. Cada controlador contiene los estados Idle, Walk, Attack, Defense y Death, con transiciones definidas mediante parámetros y condiciones lógicas.
  • Control de los personajes: Para controlar los personajes fue creado un script RobotFighterController para cada robot, utilizando el nuevo sistema de Input de Unity. El primer jugador se controla con las teclas A / D / F / R, y el segundo con J / L / H / Y. El script gestiona movimiento, ataque, defensa, daño, muerte y orientación automática según la dirección del desplazamiento. 
  • Sistema de vida y combate:  Para la vida se implementó el script RobotHealth utilizando un slider para representar la vida en una barra. Cada ataque reduce la salud del oponente si este no se encuentra defendiendo, mientras que el estado de defensa bloquea el daño y reproduce un sonido de bloqueo. 
  • Pausa, menú y UI: Se añadió un menú principal con botones sonoros, un panel de controles y un sistema de pausa/mute. Durante la pausa el juego se detiene completamente (Time.timeScale = 0), se desactiva el input y se muestra un panel con el texto Pausa.
  • Pantalla de victoria: Cuando la salud de uno de los robots llega a cero, se activa la animación de muerte y tras unos segundos se carga la escena WinScene, donde se muestra el robot ganador, un texto indicando el nombre del robot ganador (Robotina o Nono), música de victoria y dos botones, uno para volver a jugar y otro para el menú principal. 
  • Efectos sonoros y música: Efectos para ataque, impacto, bloqueo, pasos y muerte. Música de fondo en el combate y en la escena de victoria. Sonidos asociados a los botones del menú y sistema global de mute que afecta a todo el AudioListener. 
  • Decoración y escenario: Se añadieron paredes, suelo y materiales metálicos para simular un entorno de combate tipo arena. Se ajustó la iluminación y la cámara para una visión lateral adecuada al estilo de juego. 
  • Cámara dinámica: Se creó un script FightCameraController que sigue a ambos personajes y ajusta el zoom dinámicamente según la distancia entre ellos.

Animator Controllers

Parámetros utilizados

  • float Speed: controla la transición entre Idle y Walk.
  • trigger Attack: activa la animación de ataque.
  • bool Defend: activa la defensa mientras se mantiene pulsada la tecla.
  • bool Dead: determina la animación de muerte.
  • float DefendSpeed: controla la velocidad del clip de defensa, permitiendo mantener la pose final mientras se mantiene la tecla de defensa.

Transiciones y condiciones

  • Idle: estado por defecto. Se reproduce cuando el personaje no se desplaza ni realiza acciones.
  • Walk: animación en bucle cuando el jugador se mueve.
  • Punch (Attack): animación no cíclica que se ejecuta una vez al atacar.
  • Defense (Defend): animación defensiva que se activa mientras el jugador mantiene la tecla.
  • Death: animación final cuando la vida llega a 0.

Configuración de clips (Loop)

  • Idle y Walk: Loop Time ON, para repetirse sin saltos.
  • Punch y Death: Loop Time OFF, para ejecutarse una sola vez.
  • Defense: se gestiona como una defensa mantenida. Para evitar que vuelva a idle mientras la tecla sigue pulsada, se ajustó la velocidad del estado usando un parámetro.

Visión de futuro

Este prototipo sirve para demostrar las bases de un juego de lucha. En el futuro, el proyecto podría evolucionar hacia un producto más complejo con:

  • Combos y ataques especiales, gestionados con un sistema de estados adicionales.
  • IA enemiga, permitiendo luchar contra el ordenador.
  • VFX y partículas, para impactos, chispas o explosiones.
  • Menú de selección de personajes y varios escenarios.
  • Modo multijugador local/online.
  • Optimización para móviles (controles táctiles y HUD adaptativo).
  • Sistema de puntuación y registro de victorias.

Conclusión

El proyecto cumple con los objetivos planteados: integrar animaciones, programar controles y lograr un juego jugable, con transiciones suaves, efectos de sonido coherentes, cámara funcional y estética cuidada. A nivel personal, esta práctica permitió comprender el flujo completo de producción de un juego en Unity, desde la configuración del Animator Controller hasta la lógica de scripts, la integración de audio y la publicación WebGL. El resultado final es un prototipo sólido que combina programación, animación y diseño, demostrando la relación entre arte y técnica en el desarrollo de videojuegos.

Gameplay

Entrada similar

Deixa un comentari