Saltar al contenido

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

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