Menu
CoddyTech

Cause Dano a Tudo

Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 43 de 50.

challenge icon

Desafio

Médio

Agora a luta acontece nos dois sentidos. Mantenha tudo das lições anteriores. Os inimigos não têm mais tags: o golpe encontra o que puder ferir por meio de uma interface, e os inimigos ferem o herói por meio da mesma interface.

  • IDamageable declara um método, void TakeDamage(int amount);.
  • Enemy implementa essa interface. Ele recebe health, damage e attackEvery, definidos no Inspector (um grunt tem 2, 1 e 1; o dasher, 1, 2 e 1). TakeDamage subtrai amount de health e destrói o inimigo quando chega a 0 ou menos. Em Start, mantenha também o IDamageable do herói. A cada quadro, quando o herói estiver a até 1.2 unidades de distância, chame o método TakeDamage(damage) dele, no máximo uma vez a cada attackEvery segundos.
  • Hero implementa essa interface, com swingDamage (1), maxHealth (5) e safeTime (1) definidos no Inspector, e um health que começa com o valor de maxHealth em Awake. Um golpe subtrai amount, registra a saúde como Hero HP: 4 e mantém o herói protegido de novos golpes por safeTime segundos. Com 0 de saúde, registre The hero falls e desative o script Hero (enabled = false). Um herói caído ignora os golpes.
  • O golpe não verifica mais tags nem destrói nada: ele chama TakeDamage(swingDamage) em tudo que estiver ao alcance e à frente e tiver um IDamageable.

Pressione Play e lute; em seguida, clique em Check.

Experimente você mesmo

// Uma aula posterior vai completar isto: qualquer coisa que possa sofrer dano.
public interface IDamageable
{
}

Todas as lições de Arquitetura de jogos no Unity