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
- Selecciona el
Jugador
en la Jerarquía (Hierarchy
). - 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.
- 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. - Asegúrate de que tiene un
NavMeshAgent
(Add Component > NavMeshAgent
). - Asegura que tiene 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 «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
- Selecciona el
Enemigo
en la Jerarquía. - Arrástrale el script
EnemigoPersecucion.cs
(Add Component > EnemigoPersecucion
). - Arrastra el
Jugador
al campoObjetivo
en elInspector
.
🔹 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
- Ve a
GameObject > UI > Canvas
y créalo. - Renómbralo
CanvasGameOver
. - Dentro del
CanvasGameOver
, haz:UI > Panel
→ Renómbralo"PanelGameOver"
.UI > Text (TextMeshPro)
→ Escribe «¡Game Over!».UI > Button - TextMeshPro
→ RenómbraloBotonReiniciar
y cambia su texto a"Reintentar"
.
- Desactiva
CanvasGameOver
en elInspector
para que no aparezca al inicio.
📌 Paso 2: Crear el Script GameOverManager.cs
- Crea un nuevo script en
Assets/Scripts
. - Nómbralo
GameOverManager.cs
y abre el archivo. - 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»
- Selecciona el
BotonReiniciar
en la Jerarquía. - En el
Inspector
, busca la secciónButton > OnClick()
. - Haz clic en
+
para agregar una nueva acción. - Arrastra el
GestorGameOver
al campo vacío. - 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.
