Barre della salute
Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 10 di 56.
Una barra che si svuota è un'immagine UI con Image Type impostato su Filled. Questa impostazione compare quando all'immagine è assegnata una Source Image; se è None, l'Inspector la nasconde. Fill Method Horizontal con Fill Origin Left restringe 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 indica la parte di salute rimanente: la salute divisa per il suo massimo. Con campi int si tratta di una divisione intera, e 350 / 500 è 0, quindi converti prima un lato 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.
Sfida
FacileIl cavaliere ha uno scudo che assorbe i danni prima che vengano sottratti alla sua salute. Le frecce la fanno muovere (Mover.cs) e le punte le infliggono 30 danni quando ci cammina sopra (Spikes.cs). Scrivi Knight.cs; nella scena sono collegati healthBar e shieldBar, che nella scena sono vuoti:
hpparte damaxHp(80) eshielddamaxShield(40), ed entrambe le barre partono piene.TakeDamage(int amount): lo scudo assorbe la quantità di danno che può in base a quanto gli resta, e il resto viene sottratto dahp, che non scende mai sotto 0.- Dopo ogni colpo, entrambe le barre mostrano ciò che resta:
shieldBarmostra lo scudo rispetto amaxShield,healthBarmostra gli hp rispetto amaxHp.
Premi Play, cammina sulle punte alcune volte, poi premi Check.
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 quanto può; il resto viene sottratto a hp, fino a 0. Poi mostra entrambe le barre.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Creare veri giochi
1Testo sullo schermo
Canvas e testoMostra il punteggioFormattare i numeriUn timer per il conto alla rovesciaRiepilogo: tachimetro4Scene e livelli
Caricare una scenaRiavviare il livelloLivello successivoMantenere i dati tra le sceneRiepilogo: selezione del livello10Progetto: Platform 3D
Il percorsoPiattaforme mobili2Pulsanti e schermate
Pulsanti e onClickLambdaCollegare nell'InspectorPannelli attivi e disattiviBarre della saluteRiepilogo: negozio degli upgrade5Salvare con PlayerPrefs
Salvare un numeroCaricare con un valore predefinitoPunteggio massimoSalvare le impostazioniRiepilogo: monete in banca8Controller del personaggio
CharacterController.MoveGravità manualeSaltoSpingere gli oggettiMuoviti dove guardiRiepilogo: doppio salto3Il gestore del gioco
Uno script gestisce il giocoIl SingletonStati di giocoSelezionare lo statoRiepilogo: gestore del round6Progetto: Corsa infinita
Tre corsieOstacoli in arrivo9Il nuovo sistema di input
Due sistemi di inputTastiera e mousePremuto in questo frameAzioni di inputRiepilogo: cambio di input