Menu
CoddyTech

Lebensbalken

Lektion 22 von 25 im Kurs Unity-Spiel: Tower Defense von Coddy.

Ein Balken über jedem Gegner zeigt an, wie viel Gesundheit ihm noch bleibt. Im Gegner-Prefab besteht er aus zwei dünnen Würfeln: einem dunklen Hintergrund und einer grünen Füllung davor. Die Breite der Füllung entspricht der verbleibenden Gesundheit geteilt durch die volle Gesundheit, also einer Zahl zwischen 0 und 1; skaliert man die x-Achse der Füllung damit, wird sie kürzer. Ein Würfel wird jedoch um seinen Mittelpunkt skaliert, sodass die Füllung von beiden Enden aus zur Mitte hin schrumpfen würde. Die Füllung befindet sich unter einem leeren Pivot-Objekt am linken Rand des Balkens, und das Skript skaliert stattdessen den Pivot: Alles darunter schrumpft in Richtung dieses Randes, und der Balken leert sich von rechts.

Der Bruch muss mit Fließkommazahlen berechnet werden. health / data.maxHealth teilt zwei Ganzzahlen, und C# verwirft den Nachkommateil einer Ganzzahldivision: 6 / 9 ergibt 0, sodass der Balken nach dem ersten Treffer leer angezeigt würde. Wenn man zuerst eine Seite umwandelt, (float)health / data.maxHealth, erhält man 0.67. Ein Wassertank, dessen Füllstand von seinem Pivot am Boden aus nach oben steigt:

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

Ein voller Balken sagt dem Spieler nichts, deshalb ist der Balken anfangs ausgeblendet: Im Prefab ist er deaktiviert, und der erste Treffer schaltet ihn ein. Ein deaktiviertes Objekt erhält keine Aufrufe von Update, aber seine Methoden können weiterhin aufgerufen werden. Jeder Gegner ist eine eigene Kopie des Prefabs und hat seinen eigenen Balken.

challenge icon

Aufgabe

Schwer

Zeige über jedem Gegner einen Gesundheitsbalken an, sobald er getroffen wird.

  1. Füge in HealthBar [SerializeField] private Transform fill; und public void Show(float fraction) hinzu: Schalte den Balken ein und setze fill.localScale = new Vector3(fraction, 1f, 1f);.
  2. Füge in Enemy [SerializeField] private HealthBar healthBar; hinzu; nachdem TakeDamage die Gesundheit verringert hat, rufe healthBar.Show((float)health / data.maxHealth); auf.

Drücke „Spielen“: Die Balken werden angezeigt und schrumpfen, wenn die Türme treffen. Drücke dann „Prüfen“.

Probier es selbst

using UnityEngine;

// Kommt später: der Balken über einem Gegner, der dessen verbleibende Gesundheit anzeigt.
public class HealthBar : MonoBehaviour
{
}

Alle Lektionen in Unity-Spiel: Tower Defense

Übe selbstständig: Unity-Playground