🎮 Cómo Detener la IA de un Enemigo al Colisionar con el Jugador en Unity

En este tutorial, aprenderás a hacer que un enemigo con NavMeshAgent se detenga cuando colisione con el jugador. Esto es útil para implementar eventos como:

âś… El enemigo deja de moverse cuando atrapa al jugador.
âś… Se puede activar un Game Over o animaciones personalizadas.
âś… Funciona con NavMeshAgent y OnTriggerEnter().


🔹 1. Configurar el Enemigo y el Jugador Correctamente

Para que la detecciĂłn de colisiones funcione, es necesario que el jugador y el enemigo tengan Collider y Rigidbody.

📌 Paso 1: Configurar el Jugador

  1. Selecciona el Jugador en la JerarquĂ­a (Hierarchy).
  2. Asegura 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. Asegura 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

📌 Paso 3: Detener el NavMeshAgent al Colisionar

Modifica el script de la IA del enemigo (EnemigoPersecucion.cs) para que detenga su movimiento al tocar 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! Deteniendo IA.");

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

            // Opcional: Llamar a Game Over
            GameOverManager gameOver = FindObjectOfType<GameOverManager>();
            if (gameOver != null)
            {
                gameOver.ActivarGameOver();
            }
        }
    }
}

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

🎯 Resultado Final

âś… El enemigo persigue al jugador normalmente.
âś… Cuando lo toca, se detiene completamente (NavMeshAgent desactivado).
âś… Opcionalmente, puede activar una animaciĂłn de ataque o Game Over.

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   
Privacidad