Menu
CoddyTech

Barre della salute

Lezione 22 di 25 del corso Gioco Unity: Tower Defense 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

Mostra una barra della salute sopra ogni nemico quando viene colpito.

  1. In HealthBar, aggiungi [SerializeField] private Transform fill; e public void Show(float fraction): attiva la barra e imposta fill.localScale = new Vector3(fraction, 1f, 1f);.
  2. In Enemy, aggiungi [SerializeField] private HealthBar healthBar;; dopo che TakeDamage sottrae salute, chiama healthBar.Show((float)health / data.maxHealth);.

Premi «Gioca»: le barre appaiono e si riducono quando le torri colpiscono. Poi premi «Verifica».

Provalo tu

using UnityEngine;

// Verrà aggiunta in seguito: la barra sopra un nemico che mostra quanta salute gli resta.
public class HealthBar : MonoBehaviour
{
}

Tutte le lezioni di Gioco Unity: Tower Defense

Esercitati da solo: Playground Unity