En este tutorial, aprenderás a implementar un sistema de Game Over en Unity que:
✅ Muestra un «Game Over» cuando el jugador pierde.
✅ Detiene el movimiento del jugador y enemigos.
✅ Muestra un botón para reiniciar la escena.
🔹 1. Crear la Interfaz de Game Over
📌 Paso 1: Crear el Canvas
- En
GameObject > UI > Canvas
, crea un Canvas. - Nómbralo «CanvasGameOver».
- Asegúrate de que el
CanvasScaler
está configurado en:UI Scale Mode
: Scale With Screen SizeReference Resolution
: 1920×1080
📌 Paso 2: Agregar el Panel de Game Over
- Dentro del
CanvasGameOver
, hazClic derecho > UI > Panel
. - Nómbralo «PanelGameOver».
- Ajusta el tamaño y color para que cubra la pantalla.
📌 Paso 3: Agregar Texto y Botón de Reinicio
- Dentro del
PanelGameOver
, haz:UI > Text (TextMeshPro)
→ Escribe «¡Game Over!».UI > Button - TextMeshPro
→ RenómbraloBotonReiniciar
.- Cambia el texto del botón a
"Reintentar"
.
- Desactiva el
PanelGameOver
en elInspector
para que no aparezca al inicio.
🔹 2. Crear el Script de Game Over
📌 Paso 4: Crear un Script GameOverManager.cs
- Ve a la carpeta
Scripts
(Assets/Scripts
). - Clic derecho > Create > C# Script.
- Nómbralo
GameOverManager.cs
y ábrelo. - Copia este código:
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameOverManager : MonoBehaviour
{
public GameObject panelGameOver; // Referencia al Panel de Game Over
void Start()
{
// Asegurar que el panel de Game Over está oculto al inicio
if (panelGameOver != null)
{
panelGameOver.SetActive(false);
}
else
{
Debug.LogWarning("⚠️ Panel de Game Over no asignado en el Inspector.");
}
}
// Método para activar el Game Over
public void ActivarGameOver()
{
if (panelGameOver != null)
{
panelGameOver.SetActive(true);
}
// Detener el tiempo del juego
Time.timeScale = 0f;
}
// Método para reiniciar la escena
public void ReiniciarJuego()
{
Time.timeScale = 1f; // Reactivar el tiempo
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
🔹 3. Integrar el Sistema de Game Over con el Jugador
📌 Paso 5: Modificar el Script de Pérdida del Jugador
Si tienes un enemigo que debe hacer que el jugador pierda al tocarlo, modifica su código (PersecucionJugador.cs
o el que tengas) para que active el Game Over.
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("¡Game Over!");
// Buscar el GameOverManager en la escena y activar el Game Over
GameOverManager gameOver = FindObjectOfType<GameOverManager>();
if (gameOver != null)
{
gameOver.ActivarGameOver();
}
// Opcional: Desactivar el jugador
other.gameObject.SetActive(false);
}
}
🔹 4. Conectar el Botón de «Reintentar»
📌 Paso 6: Asignar el Script al Panel
- Crea un
GameObject
vacío en la Jerarquía (GameObject > Create Empty
). - Renómbralo
GestorGameOver
. - Arrástrale el script
GameOverManager.cs
(Add Component > GameOverManager
). - En el
Inspector
, arrastra elPanelGameOver
al campoPanelGameOver
.
📌 Paso 7: Conectar el Botón de Reintentar
- Selecciona el
BotonReiniciar
en la Jerarquía. - En el
Inspector
, busca la secciónButton > OnClick()
. - Haz clic en
+
para agregar una nueva acción. - Arrastra el
GestorGameOver
al campo vacío. - En la lista desplegable, selecciona
GameOverManager > ReiniciarJuego()
.
🎯 Resultado Final
✅ Cuando el jugador pierda, aparecerá el PanelGameOver
.
✅ El tiempo del juego se detendrá (Time.timeScale = 0
).
✅ El jugador no podrá moverse hasta que presione «Reintentar».
✅ Al presionar «Reintentar», la escena se reiniciará.
