Menu
CoddyTech

Barre della salute

Lezione 16 di 18 del corso Gioco Unity: difesa della torre di Coddy.

Una barra sopra ogni nemico mostra quanta salute gli resta. Nel prefab del nemico è composta da due cubi sottili: uno sfondo scuro e un riempimento verde davanti. La larghezza del riempimento è la salute rimanente divisa per la salute massima, un numero da 0 a 1, e scalarne l'asse x di quel valore lo rende più corto. Un cubo però si scala attorno al proprio centro, quindi il riempimento si restringerebbe verso il centro da entrambe le estremità. Il riempimento si trova sotto un oggetto pivot vuoto sul bordo sinistro della barra, e lo script scala invece il pivot: tutto ciò che si trova sotto di esso si restringe verso quel bordo e la barra si svuota da destra.

La frazione deve essere calcolata usando numeri float. health / data.maxHealth divide due int, e C# elimina la parte frazionaria di una divisione tra int: 6 / 9 è 0, quindi la barra risulterebbe vuota dopo il primo colpo. Convertendo prima un lato, (float)health / data.maxHealth, si ottiene 0.67. Un serbatoio d'acqua il cui livello cresce verso l'alto a partire dal suo pivot sul fondo:

float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);

Una barra piena non comunica nulla al giocatore, quindi all'inizio è nascosta: il prefab la tiene disattivata e il primo colpo la attiva. Un oggetto disattivato non esegue Update, ma è comunque possibile chiamarne i metodi. Ogni nemico è una copia indipendente del prefab, con la propria barra.

challenge icon

Sfida

Difficile
  1. In HealthBar, aggiungi un Transform serializzato fill (l’Inspector assegna il FillPivot della barra) e public void Show(float fraction), che attiva il GameObject della barra e scala fill a fraction lungo l’asse x.
  2. In Enemy, aggiungi un campo serializzato healthBar (un HealthBar). Ogni volta che TakeDamage riduce la salute, mostra la salute rimanente come frazione di maxHealth.

Ogni prefab nemico ha la propria barra: inattiva, con lo script HealthBar, e il riempimento sotto un pivot sul bordo sinistro. Premi Gioca e guarda le barre mentre le torri sparano, poi Controlla.

Provalo tu

using UnityEngine;

// Verrà aggiunta più avanti: la barra sopra un nemico che mostra quanta salute gli rimane.
public class HealthBar : MonoBehaviour
{
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: difesa della torre