Menu
CoddyTech

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.

challenge icon

Desafio

Fácil

A 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:

  • hp começa em maxHp (80) e shield em maxShield (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 de hp, que nunca fica abaixo de 0.
  • Após cada golpe, ambas as barras mostram o que resta: shieldBar mostra o escudo em relação a maxShield, e healthBar mostra o hp em relação a maxHp.

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.
    }
}
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 Criando jogos de verdade