Menu
CoddyTech

Inflige daño a todo

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 43 de 50.

challenge icon

Desafío

Intermedio

Ahora el combate va en ambos sentidos. Conserva todo lo de las lecciones anteriores. Los enemigos ya no tienen etiquetas: el golpe encuentra lo que puede dañar mediante una interfaz, y los enemigos dañan al héroe mediante esa misma interfaz.

  • IDamageable declara un método, void TakeDamage(int amount);.
  • Enemy lo implementa. Tiene health, damage y attackEvery, configurados en el Inspector (un grunt tiene 2, 1 y 1; el dasher, 1, 2 y 1). TakeDamage resta amount a health y destruye al enemigo cuando llega a 0 o menos. En Start, guarda también el IDamageable del héroe. En cada fotograma, cuando el héroe está a menos de 1.2 unidades, llama a su TakeDamage(damage), como máximo una vez cada attackEvery segundos.
  • Hero lo implementa, con swingDamage (1), maxHealth (5) y safeTime (1) configurados en el Inspector, y un health que comienza con el valor de maxHealth en Awake. Un golpe resta amount, registra la salud como Hero HP: 4 y mantiene al héroe a salvo de más golpes durante safeTime segundos. Cuando la salud llega a 0, registra The hero falls y desactiva el script Hero (enabled = false). Un héroe caído ignora los golpes.
  • El golpe ya no comprueba etiquetas ni destruye nada: llama a TakeDamage(swingDamage) en todo lo que esté al alcance y delante, y tenga un IDamageable.

Pulsa Play y lucha; después, pulsa Check.

Pruébalo tú mismo

// Una lección posterior completará esto: cualquier cosa que pueda recibir daño.
public interface IDamageable
{
}

Todas las lecciones de Arquitectura de juegos en Unity