Saltar al contenido

🎮 Cómo Hacer que el Jugador Muera al Ser Atrapado por un Enemigo en Unity

En este tutorial, aprenderás a hacer que el jugador «muera» cuando es atrapado por un enemigo. Esto puede significar:

Ocultar al jugador (desactivarlo o destruirlo).
Mostrar un Game Over.
Detener el movimiento del jugador.
Reiniciar la escena después de un tiempo.


🔹 1. Configurar el Jugador y el Enemigo

Para que la colisión funcione correctamente, asegúrate de que el jugador y el enemigo tienen los componentes adecuados.

📌 Paso 1: Configurar el Jugador

  1. Selecciona el Jugador en la Jerarquía (Hierarchy).
  2. Asegúrate de que tiene un Rigidbody (Add Component > Rigidbody).
    • Marca Is Kinematic ✅ (si el jugador no usa física).
    • Desactiva Use Gravity si el jugador no debe caer.
  3. Asegura que tiene un Collider (BoxCollider, CapsuleCollider, etc.).
  4. Dale el Tag "Player" (Inspector > Tag > Player).

📌 Paso 2: Configurar el Enemigo

  1. Selecciona el Enemigo en la Jerarquía.
  2. Asegúrate de que tiene un NavMeshAgent (Add Component > NavMeshAgent).
  3. Asegura que tiene un Collider (BoxCollider, CapsuleCollider, etc.).
  4. Marca Is Trigger en el Collider ✅ (para usar OnTriggerEnter).
  5. Dale el Tag "Enemigo" (Inspector > Tag > Enemigo).

🔹 2. Modificar el Script del Enemigo para «Matar» al Jugador

📌 Paso 3: Crear el Script EnemigoPersecucion.cs

Modifica el código para detectar al jugador y desactivarlo cuando lo atrape.

using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;

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 jugador ha muerto!");

            // Detener al enemigo
            agente.isStopped = true;
            agente.enabled = false;

            // Opcional: Desactivar al jugador
            other.gameObject.SetActive(false);

            // Opcional: Activar animación de ataque del enemigo
            if (animator != null)
            {
                animator.SetTrigger("Atacar");
            }

            // Opcional: Mostrar Game Over y reiniciar escena
            GameOverManager gameOver = FindObjectOfType<GameOverManager>();
            if (gameOver != null)
            {
                gameOver.ActivarGameOver();
            }
            else
            {
                // Si no hay GameOverManager, reiniciar la escena después de 3 segundos
                Invoke("ReiniciarJuego", 3f);
            }
        }
    }

    void ReiniciarJuego()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}

🔹 3. Asignar el Script al Enemigo

  1. Selecciona el Enemigo en la Jerarquía.
  2. Arrástrale el script EnemigoPersecucion.cs (Add Component > EnemigoPersecucion).
  3. Arrastra el Jugador al campo Objetivo en el Inspector.

🔹 4. Opcional: Mostrar un Panel de Game Over

Si quieres mostrar un panel de Game Over antes de reiniciar la escena, haz lo siguiente:

📌 Paso 1: Crear el Canvas de Game Over

  1. Ve a GameObject > UI > Canvas y créalo.
  2. Renómbralo CanvasGameOver.
  3. 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".
  4. Desactiva CanvasGameOver en el Inspector para que no aparezca al inicio.

📌 Paso 2: Crear el Script GameOverManager.cs

  1. Crea un nuevo script en Assets/Scripts.
  2. Nómbralo GameOverManager.cs y abre el archivo.
  3. 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);
        }
    }

    // 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);
    }
}

📌 Paso 3: 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, este «muere» (se desactiva o destruye).
Se muestra un Game Over antes de reiniciar la escena.
El enemigo deja de moverse tras atrapar al jugador.

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