Mario Merlo
Hasta ahora es uno de los mejores cursos que he seguido. Buen Profesor
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(); } }
¿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); }
¿Por qué centralizar el setGameState?
¿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(); } }
¿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.
Una pequeña validacion para evitar ejecutar el StartGame cada vez que detectamos el Input
if (Input.GetKeyDown(KeyCode.S) && currentGameState != GameState.inGame) { StartGame(); }
Mario Merlo
Hasta ahora es uno de los mejores cursos que he seguido. Buen Profesor
Martin Chavez Ceja
la cantidad de cosas que se pueden hacer con tan solo 18 clases de 53 es increíble
Víctor Raúl Grajeda Aranda
Es excelente tener este game manager que te ayude a saber en que estado se encuentra el juego, lo encuentro muy organizado y muy útil para no confundirnos demasiado con el código que estamos creando. Gran curso
Antonio Demarco Bonino
Esto me ayudó a dejarlo listo:
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.S)) { StartGame(); } else if(Input.GetKeyDown(KeyCode.P)) { BackToMenu(); } else if(Input.GetKeyDown(KeyCode.Q)) { GameOver(); } }
Marcela Dueñas
No queria tener una lista de if else por cada tecla a la que le asignemos una funcion, por lo cual quise aplicar un switch case pero _ Input.GetKeyDown(KeyCode.S)_ no me lo permitia como variable ; asi que busque en foros y encontre esta solucion:
void Update() { var input = Input.inputString; switch (input) { case "s": StartGame(); break; case "p": BackToMenu(); break; default: break; } }
Hernan Manrique Becoche
Hola buen día,
El código como tal esta bien, lo probé, solamente tienes que hacer esto:
switch (Input.inputString) { case "Q": Debug.Log("Presiono Q"); break; case "q": Debug.Log("Presiono q"); break; default: break; }
Recuerda: No es lo mismo la Q mayúscula que la q minúscula, espero te sirva.
Miguel Angel Velazquez Romero
Jejejejje, el Profe aun no ha hecho su tarea después de varios videos, no ha hecho que el personaje deje de avanzar solo y pueda voltear a los lados.
Pedro Muñoz Becerra
Yo prefiero usar la tecla "enter" o "intro" en el teclado, esta se llama "return" dentro de las keycode.
if (Input.GetKeyDown(KeyCode.Return)) { StartGame(); }
Damian Adriel Crivani Jara
Una manera de entrar en modo menu o regresar a inGame.
void Update() { if (Input.GetKeyDown(KeyCode.P) && currentGameState == GameState.inGame) { BackToMenu(); } else if (Input.GetKeyDown(KeyCode.P) && currentGameState == GameState.menu) { StartGame(); } }
DIEGO LEON TEJADA VELASQUEZ
Al colocar los todos no se me resaltan en color morado en el editor, sino que se colocan como si fuera un comentario normal. Estoy usando Visual Studio. ¿Cómo puedo solucionar esto?
Tomas Leonardo Amaya Ríos
Así quedaría según la explicación:
public void StartGame(){ SetGameState (GameState.inGame); } public void GameOver(){ SetGameState (GameState.gameOver); } public void BackToMenu(){ SetGameState (GameState.menu); } private void SetGameState(GameState newGameSate){ if( newGameSate== GameState.menu){ } else if(newGameSate== GameState.inGame){ controller.StartGame(); }else if(newGameSate==GameState.gameOver){ } this.currentGameState = newGameSate; }
Leonardo Gutierrez
Genial