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.
