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
Jugador
en la Jerarquía (Hierarchy
). - Añade un
Rigidbody
al Jugador (Add Component > Rigidbody
).- Marca
Is Kinematic
✅ (si el jugador no usa física). - Desactiva
Use Gravity
si 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
Enemigo
en la Jerarquía. - Añade un
NavMeshAgent
(Add Component > NavMeshAgent
). - Añade un
Collider
(BoxCollider
,CapsuleCollider
, etc.). - Marca
Is Trigger
en 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
Enemigo
en la Jerarquía. - Arrástrale el script
EnemigoPersecucion.cs
(Add Component > EnemigoPersecucion
). - Arrastra el
Jugador
al campoObjetivo
en 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.
