Menu
CoddyTech

Vida e dano

Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 53 de 63.

O dano envolve dois scripts. Um script Health fica em tudo que pode sofrer dano e controla seus pontos de vida, e o que causa o dano encontra esse script e chama um método nele. Aqui está o Health de uma caixa que quebra após três golpes e de espinhos que causam dano a tudo que cai sobre eles:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage é public, então outros scripts podem chamá-lo, e ele é o único código que altera hp. Espinhos, balas e lava chamam o mesmo método, e somente o script Health decide o que 0 significa: destruir a caixa, encerrar o jogo ou reproduzir uma animação de morte. Cada script fica em seu próprio arquivo, nomeado de acordo com sua classe.

GetComponent<Health>() retorna null para objetos que não têm Health, como o chão, então os espinhos verificam antes de chamar. TryGetComponent(out Health health) faz a busca e a verificação em uma única chamada: retorna true e preenche health somente quando há um componente.

challenge icon

Desafio

Médio

Uma arma de treinamento dispara contra um boneco e um cavaleiro blindado. O script Shooter na arma está pronto: as setas para a esquerda e para a direita a giram, e a barra de espaço dispara uma Bullet. Escreva os dois scripts que fazem os acertos valerem.

Health, no Dummy e no Knight (o Inspector define hp e armor):

  • Um método público TakeDamage(int amount): hp diminui em amount menos armor, mas sempre em pelo menos 1.
  • Após cada acerto, registre o nome do objeto e o hp restante, como Dummy hp: 2.
  • Com 0 hp ou menos, destrua o objeto.

Bullet, em cada bala (o Inspector define damage como 2):

  • Quando a bala acertar algo que tenha um Health, chame seu TakeDamage(damage).
  • Destrua a bala, independentemente do que ela atingir, inclusive a parede.

Pressione Play, derrube o boneco e o cavaleiro e, em seguida, Check.

Experimente você mesmo

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // reduza o hp em amount menos armor (no mínimo 1), registre o que restou e destrua ao chegar a 0
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Física e jogabilidade