En este tutorial, aprenderás a hacer que el enemigo se detenga completamente cuando alcanza al jugador, utilizando NavMeshAgent y detección de colisiones (OnTriggerEnter).
✅ El enemigo dejará de moverse al colisionar con el jugador.
✅ Puede activar una animación de ataque o un Game Over.
✅ Fácil de integrar con NavMeshAgent.
🔹 1. Configurar el Enemigo y el Jugador
📌 Paso 1: Configurar el Jugador
- Selecciona el
Jugadoren la Jerarquía (Hierarchy). - Añade un
Rigidbodyal Jugador (Add Component > Rigidbody).- Marca
Is Kinematic✅ (si el jugador no usa física). - Desactiva
Use Gravitysi el jugador no debe caer.
- Marca
- Asegura que tiene un
Collider(BoxCollider,CapsuleCollider, etc.). - Dale el
Tag"Player"(Inspector > Tag > Player).
📌 Paso 2: Configurar el Enemigo
- Selecciona el
Enemigoen la Jerarquía. - Añade un
NavMeshAgent(Add Component > NavMeshAgent). - Añade un
Collider(BoxCollider,CapsuleCollider, etc.). - Marca
Is Triggeren elCollider✅ (para usarOnTriggerEnter). - Dale el
Tag"Enemigo"(Inspector > Tag > Enemigo).
🔹 2. Modificar el Script del Enemigo para Detener el Movimiento
📌 Paso 3: Crear el Script EnemigoPersecucion.cs
Modifica el código del enemigo para detener su movimiento cuando alcance 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: Desactivar el control del jugador
other.GetComponent<CharacterController>().enabled = false;
// Opcional: Llamar a Game Over
GameOverManager gameOver = FindObjectOfType<GameOverManager>();
if (gameOver != null)
{
gameOver.ActivarGameOver();
}
}
}
}
🔹 3. Asignar el Script al Enemigo
- Selecciona el
Enemigoen la Jerarquía. - Arrástrale el script
EnemigoPersecucion.cs(Add Component > EnemigoPersecucion). - Arrastra el
Jugadoral campoObjetivoen elInspector.
🎯 Resultado Final
✅ El enemigo se moverá persiguiendo al jugador.
✅ Cuando alcance al jugador, se detendrá completamente.
✅ Opcionalmente, puede activar una animación de ataque o Game Over.
