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:
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.
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.
es muy interesante ver el funcionamiento de los cambios de estado con el Game Manager, es en este momento que entiendes como es que puasabas los juegos solo oprimiendo “P”, como con una “M” te desplegaban un menu de opciones y asi. Te expande la mente saber como funcionan las cosas y lo que puedes lograr.
Una pequeña validacion para evitar ejecutar el StartGame cada vez que detectamos el Input
Mas que verificar que no este inGame, deberia verificar que este en el menu ya que el objetivo de eso es que si esta en el menu que empiece el juego al apretar la tecla s.
Hasta ahora es uno de los mejores cursos que he seguido. Buen Profesor
la cantidad de cosas que se pueden hacer con tan solo 18 clases de 53 es increíble
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
Esto me ayudó a dejarlo listo:
// Update is called once per framevoidUpdate(){if(Input.GetKeyDown(KeyCode.S)){StartGame();}elseif(Input.GetKeyDown(KeyCode.P)){BackToMenu();}elseif(Input.GetKeyDown(KeyCode.Q)){GameOver();}}
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;
}
}
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.
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.
Yo prefiero usar la tecla "enter" o "intro" en el teclado, esta se llama "return" dentro de las keycode.
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?