🎮 Cómo Mostrar un Panel de Game Over Cuando el Enemigo Atrapa al Jugador en Unity
En este tutorial, aprenderás a hacer que, cuando el enemigo toque al jugador, aparezca un panel de Game Over en la pantalla.
âś… El enemigo deja de moverse al tocar al jugador.
âś… Aparece un PanelGameOver.
âś… Opcionalmente, el jugador pierde el control o se desactiva.
✅ Puedes agregar un botón de «Reintentar» para reiniciar la escena.
🔹 1. Crear la Interfaz de Game Over
📌 Paso 1: Crear el CanvasGameOver
- Ve a
GameObject > UI > Canvasy créalo. - Renómbralo
CanvasGameOver. - En el
Inspector, cambia elCanvasScalera:UI Scale Mode: Scale With Screen SizeReference Resolution: 1920×1080
📌 Paso 2: Crear el PanelGameOver
- Dentro del
CanvasGameOver, haz:UI > Panel→ Renómbralo"PanelGameOver".UI > Text (TextMeshPro)→ Escribe «¡Game Over!».UI > Button - TextMeshPro→ RenómbraloBotonReiniciary cambia su texto a"Reintentar".
- Desactiva
PanelGameOveren elInspectorpara que no aparezca al inicio.
🔹 2. Crear el Script de Game Over
📌 Paso 3: Crear el Script GameOverManager.cs
- Ve a la carpeta
Scripts(Assets/Scripts). - Clic derecho > Create > C# Script.
- NĂłmbralo
GameOverManager.csy ábrelo. - Pega 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. Modificar el Script del Enemigo para Activar el Game Over
📌 Paso 4: Modificar EnemigoPersecucion.cs
Agrega el cĂłdigo para mostrar el panel de Game Over cuando el enemigo atrape al jugador.
using UnityEngine;
using UnityEngine.AI;
public class EnemigoPersecucion : MonoBehaviour
{
public Transform objetivo; // Referencia al jugador
private NavMeshAgent agente;
private Animator animator;
void Start()
{
agente = GetComponent<NavMeshAgent>();
animator = GetComponent<Animator>();
if (objetivo == null)
{
Debug.LogError("⚠️ No se ha asignado el jugador como objetivo en el Inspector.");
}
}
void Update()
{
if (objetivo != null && agente.enabled)
{
// Perseguir al jugador
agente.SetDestination(objetivo.position);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player")) // Verifica si tocĂł al jugador
{
Debug.Log("¡El enemigo atrapó al jugador! Activando Game Over.");
// Detener el movimiento del enemigo
agente.isStopped = true;
agente.enabled = false; // Desactivar NavMeshAgent
// Opcional: Activar animaciĂłn de ataque
if (animator != null)
{
animator.SetTrigger("Atacar");
}
// Desactivar el control del jugador
other.GetComponent<CharacterController>().enabled = false;
// Mostrar el Game Over
GameOverManager gameOver = FindObjectOfType<GameOverManager>();
if (gameOver != null)
{
gameOver.ActivarGameOver();
}
}
}
}
🔹 4. Conectar el Script al Panel de Game Over
📌 Paso 5: Asignar el Script a un Objeto
- Crea un
GameObjectvacĂo en la JerarquĂa (Hierarchy). - RenĂłmbralo
GestorGameOver. - Arrástrale el script
GameOverManager.cs(Add Component > GameOverManager). - En el
Inspector, arrastra elPanelGameOveral campoPanelGameOver.
📌 Paso 6: Conectar el Botón de «Reintentar»
- Selecciona el
BotonReiniciaren la JerarquĂa. - En el
Inspector, busca la secciĂłnButton > OnClick(). - Haz clic en
+para agregar una nueva acciĂłn. - Arrastra el
GestorGameOveral campo vacĂo. - En la lista desplegable, selecciona
GameOverManager > ReiniciarJuego().
🎯 Resultado Final
âś… Cuando el enemigo toca al jugador, se detiene completamente.
âś… Aparece el PanelGameOver.
✅ El jugador no podrá moverse más.
✅ Si el GameOverManager no está asignado, Unity mostrará una advertencia.
