Menu
CoddyTech

Gesundheit und Schaden

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 53 von 63.

Schaden benötigt zwei Skripte. Ein Health-Skript befindet sich auf allem, das Schaden nehmen kann, und verwaltet dessen Trefferpunkte. Was auch immer den Schaden verursacht, findet dieses Skript und ruft eine Methode darauf auf. Hier ist das Health-Skript einer Kiste, die nach drei Treffern zerbricht, sowie von Stacheln, die allem Schaden zufügen, was auf ihnen landet:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage ist public, damit andere Skripte es aufrufen können, und es ist der einzige Code, der hp ändert. Stacheln, Geschosse und Lava rufen alle dieselbe Methode auf, und allein das Health-Skript entscheidet, was 0 bedeutet: die Kiste zerstören, das Spiel beenden oder eine Todesanimation abspielen. Jedes Skript befindet sich in einer eigenen Datei, die nach seiner Klasse benannt ist.

GetComponent<Health>() gibt für Objekte ohne Health, etwa den Boden, null zurück, daher prüfen die Stacheln dies, bevor sie die Methode aufrufen. TryGetComponent(out Health health) führt die Suche und die Prüfung in einem Aufruf durch: Es gibt true zurück und füllt health nur dann aus, wenn ein solches Objekt vorhanden ist.

challenge icon

Aufgabe

Mittel

Eine Trainingswaffe schießt auf eine Übungspuppe und einen gepanzerten Ritter. Das Shooter-Skript auf der Waffe ist bereit: Die Pfeiltasten nach links und rechts drehen sie, und die Leertaste feuert eine Kugel ab. Schreibe die beiden Skripte, die dafür sorgen, dass die Treffer zählen.

Health auf der Übungspuppe und dem Ritter (im Inspector werden hp und armor festgelegt):

  • Eine öffentliche Methode TakeDamage(int amount): hp sinkt um amount minus armor, aber immer um mindestens 1.
  • Pro Treffer den Namen des Objekts und die verbleibenden hp protokollieren, zum Beispiel als Dummy hp: 2.
  • Bei 0 hp oder weniger das Objekt zerstören.

Bullet auf jeder Kugel (im Inspector wird damage auf 2 festgelegt):

  • Wenn die Kugel etwas trifft, das über eine Health-Komponente verfügt, dessen TakeDamage(damage) aufrufen.
  • Unabhängig davon, was sie trifft, auch bei der Wand, die Kugel zerstören.

Drücke Play, wirf die Übungspuppe und den Ritter um und klicke dann auf Check.

Probier es selbst

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // Ziehe amount minus armor ab (mindestens 1), protokolliere den verbleibenden Wert und zerstöre das Objekt bei 0
    }
}
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 Physik und Gameplay