Vida e dano
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 55 de 71.
O dano envolve dois scripts. Um script Health fica em tudo que pode ser ferido e controla seus pontos de vida, e aquilo 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 ferem qualquer coisa que caia 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 é 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, com o nome de sua classe.
GetComponent<Health>() retorna null para coisas 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.
Desafio
MédioFaça os acertos valerem. Bullet está pronto e chama TakeDamage(2) no que atingir.
- Em
Health, preenchaTakeDamage(int amount): subtraiaMathf.Max(amount - armor, 1)dehp. - Registre
name + " hp: " + hp, por exemploDummy hp: 2. - Quando
hp <= 0, chameDestroy(gameObject);.
Pressione “Jogar” e atire no boneco duas vezes: ele registra Dummy hp: 2 e, em seguida, desaparece. Depois, pressione “Verificar”.
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 hp em amount menos armor (no mínimo 1), registre quanto resta e destrua ao chegar a 0
}
}
Todas as lições de Física e Jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity