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 > Canvas
y créalo. - Renómbralo
CanvasGameOver
. - En el
Inspector
, cambia elCanvasScaler
a: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ómbraloBotonReiniciar
y cambia su texto a"Reintentar"
.
- Desactiva
PanelGameOver
en elInspector
para 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.cs
y á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
GameObject
vacío en la Jerarquía (Hierarchy
). - Renómbralo
GestorGameOver
. - Arrástrale el script
GameOverManager.cs
(Add Component > GameOverManager
). - En el
Inspector
, arrastra elPanelGameOver
al campoPanelGameOver
.
📌 Paso 6: 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 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.
