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.