Estados de juego con teclas en Unity

Clase 18 de 53Curso de C# para Videojuegos

Resumen

Controlar los estados de un videojuego en Unity es clave para una experiencia fluida. Aquí verás cómo pasar del estado de menú a estado de juego con una tecla, usando un GameManager y métodos simples como startGame, gameOver y backToMenu. Todo está enfocado a construir una base sólida y escalable hacia UI y más plataformas.

¿Cómo iniciar desde un estado de menú en Unity?

Por defecto, el GameManager arranca en menú/pausa. En lugar de comenzar con el protagonista moviéndose, se propone escuchar una tecla en Update para iniciar la partida. Además, es buena práctica limpiar el código: eliminar la instancia compartida usada para arrancar al tocar el suelo y quitar los TODOs completados.

La lógica mínima en el controlador del jugador es escuchar la tecla y arrancar:

void Update() { if (Input.GetKeyDown(KeyCode.S)) { startGame(); } }
  • Estado inicial: menú pausado.
  • Acción del usuario: pulsar S.
  • Efecto: llamar a startGame para cambiar a juego.

¿Qué hace cada método de cambio de estado?

Cada método delega el cambio real en un único punto de verdad: setGameState. Así se mantiene el control centralizado y el código claro. Los métodos propuestos son directos y legibles.

public void startGame() { setGameState(GameState.InGame); } public void gameOver() { setGameState(GameState.GameOver); } public void backToMenu() { setGameState(GameState.Menu); }
  • Un solo responsable del cambio: setGameState.
  • Estados del flujo: Menu, InGame, GameOver.
  • Beneficio: transiciones consistentes y fáciles de extender.

¿Por qué centralizar el setGameState?

  • Evita duplicar lógica en varios sitios.
  • Facilita depuración y futuras reglas de transición.
  • Permite añadir efectos globales: pausa, UI, audio.

¿Qué teclas y flujos puedes probar ahora?

Además de usar S para iniciar, puedes habilitar una tecla para volver al menú. Por ejemplo, P para pausar y regresar. Esto refuerza el patrón de estados y sienta bases para migrar luego a botones e interfaces gráficas.

void Update() { if (Input.GetKeyDown(KeyCode.S)) { startGame(); } if (Input.GetKeyDown(KeyCode.P)) { backToMenu(); } }
  • S: pasar de menú a juego.
  • P: volver del juego al menú.
  • Próximo paso: reemplazar teclado por UI con botones.
  • Objetivo: escalar a cualquier plataforma con herramientas de Unity.

¿Te gustaría ver ejemplos con UI y botones para estos estados o integrar un flujo de pausa completa? Cuéntame qué necesitas y lo preparamos.