Barras de vida
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 10 de 60.
Uma barra que se esvazia é uma Image de UI com o Image Type definido como Filled. Essa configuração aparece quando a Image tem uma Source Image; com None, o Inspector a oculta. Fill Method Horizontal com Fill Origin Left reduz a barra em direção à sua extremidade esquerda, e fillAmount, de 0 a 1, determina quanto dela é desenhado. Uma Image 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 representa a parte da vida que resta: a vida dividida pelo 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 do 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ácilExiba o escudo e a vida do cavaleiro em duas barras.
- Escreva
ShowBars():shieldBar.fillAmount = (float)shield / maxShield;e faça o mesmo parahealthBarcomhpemaxHp. Chame-o emStart(). - Em
TakeDamage, o escudo absorveMathf.Min(amount, shield), e o restante é descontado dehp, que nunca fica abaixo de 0. Depois, chameShowBars().
Pressione “Jogar” e caminhe sobre os espinhos: a barra do escudo se esvazia primeiro. Depois, pressione “Verificar”.
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 dano que puder; o restante é descontado de hp, até 0. Depois, atualize as duas barras.
}
}
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ímetro2Botõ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 bancoPratique por conta própria: Playground de Unity