Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Der 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:

  • hp beginnt bei maxHp (80) und shield bei maxShield (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 von hp abgezogen, das nie unter 0 sinkt.
  • Nach jedem Treffer zeigen beide Balken den verbleibenden Wert an: shieldBar den Schildwert im Verhältnis zu maxShield, healthBar die Lebenspunkte im Verhältnis zu maxHp.

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.
    }
}
quiz iconTeste dich selbst

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