Menu
CoddyTech

Barre della salute

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 10 di 60.

Una barra che si svuota è un'immagine UI con Image Type impostato su Filled. Questa impostazione appare quando l'immagine ha una Source Image; con None, l'Inspector la nasconde. Fill Method Horizontal con Fill Origin Left fa restringere la barra verso l'estremità sinistra, e fillAmount, da 0 a 1, indica quanta parte viene disegnata. Un'immagine scura dietro mostra la parte vuota. Unity limita fillAmount, quindi 1.4 disegna una barra piena e -0.2 una vuota.

fillAmount è la parte di salute rimasta: la salute divisa per il suo massimo. Con campi int, si tratta di una divisione intera, e 350 / 500 è 0, quindi converti prima uno dei due valori in float. Image si trova in UnityEngine.UI. Questa barra del boss viene aggiornata dopo ogni colpo:

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
}

Anche il colore della barra può seguire la salute: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); è verde quando la barra è piena e diventa rossa man mano che si svuota.

challenge icon

Sfida

Facile

Mostra lo scudo e la salute del cavaliere su due barre.

  1. Scrivi ShowBars(): shieldBar.fillAmount = (float)shield / maxShield;, e fai lo stesso per healthBar con hp e maxHp. Chiamala in Start().
  2. In TakeDamage, lo scudo assorbe Mathf.Min(amount, shield) e il resto viene sottratto da hp, senza mai scendere sotto 0. Poi chiama ShowBars().

Premi «Gioca» e cammina sulle punte: la barra dello scudo si svuota per prima. Poi premi «Verifica».

Provalo tu

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;
        // Riempi entrambe le barre
    }

    public void TakeDamage(int amount)
    {
        // Lo scudo assorbe il danno che può; il resto viene sottratto a hp, fino a un minimo di 0. Poi mostra entrambe le barre.
    }
}

Tutte le lezioni di Creare veri giochi

Esercitati da solo: Playground Unity