
Lección 5.3: Game Over
Tutorial
Beginner
+10XP
70 mins
(345)
Unity Technologies

Descripción general:
Agregamos un excelente contador de puntaje al juego, pero hay muchos otros elementos de interfaz de usuario muy importantes que podríamos agregar. En esta lección crearemos el texto «Game Over» (Fin del juego) que se muestra cuando un objetivo «bueno» cae por debajo del sensor. Durante el fin del juego, los objetivos dejan de generarse y el puntaje se reinicia. Por último, agregaremos un botón «Restart Game» (Reiniciar el juego) que permite al jugador reiniciar el juego después de perder.
Resultado del proyecto:
Cuando un objetivo «bueno» cae por debajo del sensor en la parte inferior de la pantalla, los objetivos dejarán de generarse y un mensaje de «Game Over» se mostrará en la pantalla. Bajo el mensaje de «Game Over» habrá un botón «Reset Game» que reiniciará el juego y el puntaje para que el jugador pueda disfrutarlo nuevamente desde el principio.
Languages available:
1. ¿Cómo crear un objeto de texto de Game Over?
Si queremos que aparezca texto de «Game Over» cuando el juego termine, lo primero que debemos hacer es crear y personalizar un nuevo elemento de texto de interfaz de usuario que diga «Game Over».
- Haz clic derecho en el Canvas, crea un nuevo objeto UI > TextMeshPro - Text y cambia su nombre a «Game Over Text».
- En el Inspector, edita su Text, Pos X, Pos Y, Font Asset, Size, Style, Color y Alignment.
- Configura «Wrapping» a «Disabled».
2. 'Cómo hacer que aparezca el texto de GameOver?
Tenemos un hermoso texto de fin del juego en la pantalla, pero por el momento solo está ahí y bloquea nuestra visibilidad. Debemos desactivarlo para que pueda reaparecer cuando finalice el juego.
- En GameManager.cs, crea un nuevo public TextMeshProUGUI gameOverText; y asígnale el objeto Game Over en el Inspector.
- Desmarca la casilla de selección Active para desactivar el texto de Game Over de forma predeterminada.
- En Start(), activa el texto de Game Over.
3. ¿Cómo crear la función GameOver?
Hicimos aparecer el texto «Game Over» al inicio del juego, pero en realidad queremos que lo haga cuando fallemos uno de los objetos «buenos» y caiga.
- Crea una nueva función public void GameOver() y mueve el código que activa el texto de fin del juego adentro.
- En Target.cs, llama a gameManager.GameOver() si un objetivo colisiona con el sensor.
- Agrega una nueva etiqueta «Bad» al objeto malo, agrega una condición que solo desencadenará el fin del juego si no es un objeto malo.
4. ¿Cómo detener la generación de obstáculos y el puntaje durante un GameOver?
El mensaje «Game Over» aparece exactamente cuando lo queremos, pero el juego mismo continúa ejecutándose. Para en verdad detener el juego y llamarlo un «Game Over», necesitamos que la generación de objetivos se detenga y no se genere más puntaje para el jugador.
- Crea un nuevo public bool isGameActive;.
- Como primera línea en Start(), define isGameActive = true; y en GameOver(), define isGameActive = false;.
- Para evitar la generación de objetivos, en la corrutina SpawnTarget(), cambia while (true) a while (isGameActive).
- Para evitar que el puntaje se siga acumulando, en Target.cs, en la función OnMouseDown() agrega la condición if (gameManager.isGameActive) {
5. ¿Cómo agregar un botón Reiniciar?
Nuestra mecánica de Game Over funciona de maravilla, pero no hay forma de volver a jugar. Para permitir que el jugador reinicie el juego, crearemos nuestro primer botón de la interfaz de usuario.
- Haz clic derecho en el Canvas y Create > UI > Button
Nota: También podrías usar Button - TextMeshPro para tener más control sobre el texto del botón. - Cambia el nombre del botón «Restart Button».
- Por un momento reactiva el texto de Game Over para poder reubicar el botón de reinicio correctamente en relación con el texto, después desactívalo de nuevo.
- Selecciona el objeto secundario Text, luego edita su Text para que diga «Restart», su Font, Style, y Size.
6. ¿Cómo hacer que funcione el botón de reinicio?
Agregamos el botón Restart a la Escena y se ve GENIAL, pero ahora necesitamos hacer que realmente funcione y reinicie el juego.
- En GameManager.cs, agrega using UnityEngine.SceneManagement;.
- Crea una nueva función public void RestartGame() que vuelva a cargar la Escena actual.
- En el Inspector del botón haz clic en + para agregar un nuevo evento On Click, arrástralo al objeto Game Manager y selecciona la función GameManager.RestartGame.
7. ¿Cómo mostrar el botón de reinicio durante el fin del juego?
El botón Restart se ve muy bien, pero no queremos que nos estorbe durante todo el juego. De manera similar al mensaje de «Game Over», desactivaremos el botón Restart mientras el juego esté activo.
- En la parte superior de GameManager.cs agrega using UnityEngine.UI;.
- Declara un nuevo public Button restartButton; y asígnale el Restart Button en el Inspector.
- Desmarca la casilla de selección «Active» para el Restart Button en el Inspector.
- En la función GameOver activa el Restart Button.
8. Resumen de la lección
Nueva funcionalidad:
- Una pantalla de Game Over funcional con un botón Restart
- Cuando se hace clic en el botón Restart, el juego se reinicia
Nuevos conceptos y habilidades:
- Estados del juego
- Botones
- Eventos On Click
- Biblioteca de administración de Escenas
- Biblioteca de interfaz de usuario
- Booleanos para controlar los estados del juego
Siguiente lección:
- En nuestra siguiente lección, utilizaremos botones para realmente añadir un poco de dificultad a nuestro juego