Aprende a implementar kill zones invisibles en Unity 2D para gestionar la muerte del personaje sin botones. Verás cómo configurar un Box Collider 2D como isTrigger, detectar al jugador con tags, comunicar scripts con GetComponent y disparar la animación de muerte mientras el GameManager cambia a estado de Game Over.
¿Cómo crear kill zones invisibles con colliders en Unity?
Las zonas de muerte se construyen con un objeto vacío que no se visualiza. La clave es añadirle un Box Collider 2D y activar isTrigger para que el personaje lo atraviese y se dispare un evento, en lugar de sostenerlo físicamente.
- Crea un objeto vacío y nómbralo Kill Zone. Debe ser invisible. Puedes evitar Sprite Renderer para que no se vea nada.
- Añade Box Collider 2D y activa isTrigger. Así no es un collider físico, sino un disparador que ejecuta lógica al atravesarse.
- Evita confundirlo con el suelo: no lo etiquetes con el ground layer. Si lo haces, el personaje “caminará por el aire”.
- Usa el gizmo para ver su tamaño y posición durante pruebas. Hazlo grande para cubrir la zona de caída.
¿Qué es un trigger y por qué usar isTrigger?
Un trigger no bloquea ni sostiene objetos. Define una región del espacio donde suceden cosas al entrar, permanecer o salir: OnTriggerEnter2D, OnTriggerStay2D y OnTriggerExit2D.
¿Cómo evitar que el personaje camine sobre el aire?
- No marques la kill zone como terreno. Mantén su collider solo como trigger.
- Prueba en Play y verifica que el personaje atraviesa la zona y no se queda encima.
¿Cómo detectar al jugador y ejecutar la animación de muerte?
Para evitar falsos positivos, comprueba el tag del objeto que entra en la zona. Luego, comunica la kill zone con el PlayerController para invocar su método de muerte.
¿Cómo programar OnTriggerEnter2D en el script KillZone?
using UnityEngine;
public class KillZone : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
var controller = collision.GetComponent<PlayerController>();
if (controller != null)
{
controller.die();
}
}
}
}
- Usa el tag "Player" para asegurar que reaccionas solo ante el jugador.
- Emplea GetComponent() para acceder al controlador del jugador y llamar a die().
¿Cómo comunicar KillZone con PlayerController?
En el PlayerController, implementa un método público que active la animación y notifique al GameManager.
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public Animator animator;
public void die()
{
animator.SetBool("StateAlive", false);
GameManager.SharedInstance.GameOver();
}
}
- Cambia el parámetro booleano del Animator con SetBool("StateAlive", false).
- Llama a GameManager.SharedInstance.GameOver() para pasar a estado de fin de partida.
¿Cómo completar el flujo: GameManager, animaciones y pruebas?
Conecta todos los elementos y valida el comportamiento en Play. El flujo correcto: Menu → InGame → Game Over al cruzar la kill zone.
¿Qué ajustes de animación aseguran una muerte inmediata?
- Desactiva el modo loop en la animación de muerte para que no se repita.
- En el Animator, deshabilita Exit Time en la transición a la animación de muerte para que se reproduzca al instante.
- El personaje puede seguir cayendo con la pose de muerte, lo esperado al atravesar la zona.
¿Qué errores comunes puedes evitar al probar?
- Olvidar asignar el script KillZone al objeto Kill Zone. Sin script, no ocurre nada.
- No verificar el tag "Player": otros objetos podrían activar la zona por error.
- Confundir collider físico con trigger: si no activas isTrigger, el personaje se quedará “suspendido”.
- Problemas de autocompletado en Visual Studio con las librerías de Unity: reinicia el editor y vuelve a abrir el script.
¿Quieres compartir cómo gestionas otras zonas invisibles, como activadores de jefes o escenas? Comenta tu enfoque y dudas para seguir mejorando juntos.