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.
Aufgabe
SchwerZeige über jedem Gegner einen Gesundheitsbalken an, sobald er getroffen wird.
- Füge in
HealthBar[SerializeField] private Transform fill;undpublic void Show(float fraction)hinzu: Schalte den Balken ein und setzefill.localScale = new Vector3(fraction, 1f, 1f);. - Füge in
Enemy[SerializeField] private HealthBar healthBar;hinzu; nachdemTakeDamagedie Gesundheit verringert hat, rufehealthBar.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