🎮 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

  1. Ve a GameObject > UI > Canvas y créalo.
  2. RenĂłmbralo CanvasGameOver.
  3. En el Inspector, cambia el CanvasScaler a:
    • UI Scale Mode: Scale With Screen Size
    • Reference Resolution: 1920×1080

📌 Paso 2: Crear el PanelGameOver

  1. Dentro del CanvasGameOver, haz:
    • UI > Panel → RenĂłmbralo "PanelGameOver".
    • UI > Text (TextMeshPro) → Escribe «¡Game Over!».
    • UI > Button - TextMeshPro → RenĂłmbralo BotonReiniciar y cambia su texto a "Reintentar".
  2. Desactiva PanelGameOver en el Inspector para que no aparezca al inicio.

🔹 2. Crear el Script de Game Over

📌 Paso 3: Crear el Script GameOverManager.cs

  1. Ve a la carpeta Scripts (Assets/Scripts).
  2. Clic derecho > Create > C# Script.
  3. Nómbralo GameOverManager.cs y ábrelo.
  4. 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

  1. Crea un GameObject vacĂ­o en la JerarquĂ­a (Hierarchy).
  2. RenĂłmbralo GestorGameOver.
  3. Arrástrale el script GameOverManager.cs (Add Component > GameOverManager).
  4. En el Inspector, arrastra el PanelGameOver al campo PanelGameOver.

📌 Paso 6: Conectar el Botón de «Reintentar»

  1. Selecciona el BotonReiniciar en la JerarquĂ­a.
  2. En el Inspector, busca la secciĂłn Button > OnClick().
  3. Haz clic en + para agregar una nueva acciĂłn.
  4. Arrastra el GestorGameOver al campo vacĂ­o.
  5. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • LegitimaciĂłn:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • InformaciĂłn Adicional: Puede consultar la informaciĂłn detallada en la PolĂ­tica de Privacidad.

error: Content is protected !!
Este sitio web utiliza cookies, si necesitas más informaciĂłn puedes visitar nuestra polĂ­tica de privacidad    Ver
Privacidad