Barras de vida
Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 10 de 56.
Uma barra que se esvazia é uma imagem de UI com seu Tipo de imagem definido como Preenchido. Essa configuração aparece quando a imagem tem uma Imagem de origem; com None, o Inspector a oculta. Método de preenchimento Horizontal com Origem do preenchimento Esquerda faz a barra encolher em direção à sua extremidade esquerda, e fillAmount, de 0 a 1, indica quanto dela é desenhado. Uma imagem escura atrás dela mostra a parte vazia. Unity limita fillAmount, então 1.4 desenha uma barra cheia e -0.2, uma vazia.
fillAmount é a parte da vida que resta: a vida dividida pelo seu máximo. Com campos int, isso é uma divisão inteira, e 350 / 500 é 0, então converta um dos lados para float primeiro. Image fica em UnityEngine.UI. Esta barra de chefe é atualizada após cada golpe:
public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;
public void Hit(int damage)
{
bossHp = Mathf.Max(bossHp - damage, 0);
bossBar.fillAmount = (float)bossHp / bossMaxHp; // 350 / 500 = 0.7
}A cor da barra também pode acompanhar a vida: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); fica verde quando a barra está cheia e vai ficando vermelha à medida que se esvazia.
Desafio
FácilA cavaleira tem um escudo que absorve o dano antes que ele afete a vida dela. As setas a movimentam (Mover.cs), e os espinhos causam 30 de dano quando ela pisa neles (Spikes.cs). Escreva Knight.cs; na cena, vincule healthBar e shieldBar, que estão vazias:
hpcomeça emmaxHp(80) eshieldemmaxShield(40), e ambas as barras começam cheias.TakeDamage(int amount): o escudo absorve o máximo de dano que ainda consegue, e o restante é descontado dehp, que nunca fica abaixo de 0.- Após cada golpe, ambas as barras mostram o que resta:
shieldBarmostra o escudo em relação amaxShield, ehealthBarmostra o hp em relação amaxHp.
Pressione Play, caminhe sobre os espinhos algumas vezes e, em seguida, pressione Check.
Experimente você mesmo
using UnityEngine;
using UnityEngine.UI;
public class Knight : MonoBehaviour
{
public Image healthBar;
public Image shieldBar;
public int maxHp = 80;
public int maxShield = 40;
private int hp;
private int shield;
void Start()
{
hp = maxHp;
shield = maxShield;
// Preencha as duas barras
}
public void TakeDamage(int amount)
{
// O escudo absorve o quanto puder; o restante é descontado de hp, até chegar a 0. Depois, exiba as duas barras.
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Criando jogos de verdade
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro4Cenas e Fases
Carregar uma CenaReiniciar a FasePróxima FaseManter entre CenasRevisão: Seleção de Fases10Projeto: Jogo de Plataforma 3D
O PercursoPlataformas Móveis2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco