Saltar al contenido

🎮 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.

Etiquetas:

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 !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad