Gesundheitsbalken
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 10 von 56.
Ein Balken, der sich leert, ist ein UI-Image, dessen Image Type auf Filled eingestellt ist. Diese Einstellung wird angezeigt, sobald das Image ein Source Image hat; bei None blendet der Inspector sie aus. Fill Method Horizontal mit Fill Origin Left lässt den Balken zu seinem linken Ende hin schrumpfen, und fillAmount gibt von 0 bis 1 an, wie viel davon gezeichnet wird. Ein dunkles Image dahinter zeigt den leeren Teil. Unity begrenzt fillAmount, sodass 1.4 einen vollen Balken und -0.2 einen leeren Balken zeichnet.
fillAmount gibt den verbleibenden Anteil der Gesundheit an: die Gesundheit geteilt durch ihr Maximum. Bei int-Feldern ist das eine Ganzzahldivision, und 350 / 500 ergibt 0. Wandle daher zuerst eine Seite in float um. Image befindet sich in UnityEngine.UI. Dieser Boss-Balken wird nach jedem Treffer aktualisiert:
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
}Die Farbe des Balkens kann sich ebenfalls nach der Gesundheit richten: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); ist grün, wenn der Balken voll ist, und wird rot, während er sich leert.
Aufgabe
EinfachDer Ritter hat einen Schild, der Schaden abfängt, bevor ihre Lebenspunkte sinken. Mit den Pfeiltasten bewegt sie sich (Mover.cs), und die Stacheln fügen ihr 30 Schaden zu, wenn sie auf sie tritt (Spikes.cs). Schreibe Knight.cs; in der Szene sind healthBar und shieldBar verknüpft, die in der Szene leer sind:
hpbeginnt beimaxHp(80) undshieldbeimaxShield(40), und beide Balken sind anfangs voll.TakeDamage(int amount): Der Schild fängt so viel Schaden ab, wie ihm noch bleibt, und der Rest wird vonhpabgezogen, das nie unter 0 sinkt.- Nach jedem Treffer zeigen beide Balken den verbleibenden Wert an:
shieldBarden Schildwert im Verhältnis zumaxShield,healthBardie Lebenspunkte im Verhältnis zumaxHp.
Drücke Play, geh ein paar Mal auf die Stacheln und klicke dann auf Check.
Probier es selbst
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;
// Beide Balken füllen
}
public void TakeDamage(int amount)
{
// Der Schild fängt so viel Schaden wie möglich ab; der Rest wird von hp abgezogen, höchstens bis auf 0. Danach beide Balken anzeigen.
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Echte Spiele entwickeln
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank