Menu
CoddyTech

Lebensbalken

Lektion 16 von 18 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
  1. Füge in HealthBar ein serialisiertes Transform fill hinzu (im Inspector wird der FillPivot der Leiste zugewiesen) und public void Show(float fraction), das das GameObject der Leiste aktiviert und fill entlang der x-Achse auf fraction skaliert.
  2. Füge in Enemy ein serialisiertes Feld healthBar (ein HealthBar) hinzu. Zeige jedes Mal, wenn TakeDamage Gesundheit abzieht, die verbleibende Gesundheit als Bruchteil von maxHealth an.

Jedes Enemy-Prefab hat seine eigene Leiste: inaktiv, mit dem HealthBar-Skript und der Füllung unter einem Pivot am linken Rand. Drücke Play und beobachte die Leisten, während die Türme feuern, und klicke dann auf Check.

Probier es selbst

using UnityEngine;

// Kommt später: die Leiste über einem Gegner, die seine verbleibende Gesundheit anzeigt.
public class HealthBar : MonoBehaviour
{
}
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 Unity-Spiel: Tower Defense