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

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