Animaciones de Muerte y Desaparición de Enemigos en Unity
Clase 27 de 33 • Curso de VR con Unity
Contenido del curso
Creando nuestro mundo 3D en Unity
- 6

Crear terreno 3D en Unity con Standard Assets
08:42 min - 7

Creación de Escenarios en Unity: Terreno y Erosión Realista
10:19 min - 8

Texturización de terrenos en Unity: creación de entornos realistas
10:56 min - 9

Cómo pintar árboles en Unity para VR
06:54 min - 10

Añadir césped y efectos de viento en Unity 3D
06:57 min - 11

Configurar skybox de seis lados en Unity
06:53 min - 12

Integración de Armas y Escudo en Realidad Virtual con HTC Vive
12:09 min
El realismo del VR: Programando a nuestro personaje
- 13

Programación de Lógica de Armas en Realidad Virtual
10:22 min - 14

Mapeado de controles HTC Vive en Unity
10:08 min - 15

Controles VR: grip y gatillo en Unity
10:02 min - 16

Configuración de Bolas de Fuego en Unity para Realidad Virtual
09:21 min - 17

Disparo de bola de fuego en VR
10:11 min - 18

Corrección de bugs: recarga y audio en armas Unity
04:44 min - 19

Colliders y Rigidbody en el diseño de personajes y armas en Unity
08:25 min - 20

Sistema de vida reutilizable en Unity
05:23 min
El realismo del VR: Creación de HUD (Heads Up Display) y generando enemigos
- 21

HUD en VR: canvas anclado a cámara
08:50 min - 22

Configuración de Barras de Vida y Maná en Unity
05:54 min - 23

Programación de Daño en Videojuegos: Lógica de Armas y Magia
11:07 min - 24

Slider Unity: vida y maná en un script
08:00 min - 25

Cómo configurar un dragón enemigo en Unity
11:40 min - 26

Colliders y barras de vida para dragones
08:31 min - 27

Animaciones de Muerte y Desaparición de Enemigos en Unity
Viendo ahora - 28

Cómo crear oleadas de dragones con portal
11:24 min
El realismo del VR: Programando la IA de nuestro juego
Domina un flujo claro para que los enemigos reaccionen de forma realista al daño en Unity: vincula el parámetro de Animator health a los puntos de vida, reproduce la animación de muerte, habilita o no la caída con Rigidbody y programa la desaparición con Destroy. Verás además cómo un error típico como “There is no Rigidbody” se detecta y soluciona rápido desde la consola.
¿Cómo vincular health de animator con la vida del enemigo?
El guion de vida es multifunción: sirve para enemigos con animaciones y para personajes sin ellas. La clave es asociar el parámetro de Animator llamado "health" a la variable interna de vida. Así, cada cambio de vida actualiza la animación automáticamente. Si el objeto no tiene Animator, el script sigue funcionando sin errores.
¿Qué pasos seguir para inicializar y sincronizar animator?
- Detectar el Animator en Start con GetComponent y guardarlo en una variable privada.
- Establecer el parámetro "health" inicial mediante SetFloat.
- Mantener la sincronización dentro del setter de vida para reflejar cada cambio al instante.
using UnityEngine;
public class Health : MonoBehaviour
{
[SerializeField] private int healthPoints;
[SerializeField] private DamageType damageType; // Enemy / Player, etc.
private Animator animator; // Vinculado si existe Animator en el objeto.
void Start()
{
if (GetComponent<Animator>() != null)
{
animator = GetComponent<Animator>();
animator.SetFloat("health", healthPoints);
}
}
public int HealthPoints
{
get => healthPoints;
set
{
healthPoints = value;
if (animator != null)
animator.SetFloat("health", healthPoints);
if (healthPoints <= 0)
OnDeath();
}
}
private void OnDeath()
{
// Lógica de muerte abajo.
}
}
¿Qué sucede al llegar a cero puntos de vida en Unity?
Al llegar a cero, se coordina la animación de muerte con la física y la limpieza de objetos. La idea mostrada es hacer que el enemigo caiga al suelo con Rigidbody y luego desaparecer con Destroy. Más tarde se comprobó que la propia animación ya incluye la caída, por lo que se puede prescindir de activar Use Gravity, pero conviene mantener Rigidbody para movemento.
¿Cómo aplicar Rigidbody, gravedad y Destroy de forma segura?
- Obtener el Rigidbody en la muerte: si existe, activar o no useGravity según lo necesites.
- Si el tipo es enemigo (DamageType.Enemy), programar su destrucción con retardo: Destroy(gameObject, 2f).
private void OnDeath()
{
var rb = GetComponent<Rigidbody>();
if (rb != null)
{
// Opcional: si la animación no hace caer al enemigo, habilitar gravedad.
// rb.useGravity = true;
}
if (damageType == DamageType.Enemy)
Destroy(gameObject, 2f);
}
¿Cómo depurar el error “There is no Rigidbody”?
- Mirar la consola: mensaje textual “There is no Rigidbody”.
- Seleccionar los cuatro dragones en la jerarquía e incorporar el componente Rigidbody.
- Desactivar Use Gravity por defecto si la animación ya gestiona la caída.
- Verificar en la jerarquía lateral que, tras la muerte, los dragones desaparecen a los dos segundos.
¿Qué pruebas y mejoras se aplicaron durante el combate con dragones?
Se validó la mecánica de daño con armas. Con la espada no se alcanzaba al dragón: se sugirió aumentar el collider para mejorar alcance. Con el fuego, el impacto reduce la vida, aparece la barrita de vida, se reproduce la muerte, el enemigo cae y desaparece. Al principio no desaparecía: se detectó en consola el error por falta de Rigidbody, se añadió el componente y quedó resuelto.
¿Qué miniejercicio se propone para la muerte del personaje?
- No hay animación del jugador: puedes velar la pantalla en rojo.
- Añadir un botón o un temporizador que reinicie la escena tras unos segundos.
¿Qué habilidades y keywords refuerzas?
- Sincronización de Animator con variable de vida mediante "health" y SetFloat.
- Uso de GetComponent y control de nulos para scripts multifunción.
- Gestión de muerte con condición de vida <= 0.
- Física con Rigidbody y opción Use Gravity según la animación.
- Limpieza de escena con Destroy(gameObject, 2f).
- Tipificación por DamageType.Enemy para lógica específica.
- Diagnóstico con consola y verificación en jerarquía.
- Ajuste de collider para alcance de la espada.
¿Tú cómo implementarías la muerte del personaje sin animación: overlay rojo, botón o temporizador? Comparte tu enfoque y mejoras que probarías para el patrullaje y la búsqueda del jugador.