Menu
CoddyTech

Gesundheit und Schaden

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 55 von 71.

Schaden erfordert zwei Skripte. Ein Health-Skript befindet sich auf allem, das Schaden nehmen kann, und verwaltet dessen Lebenspunkte. Was 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 das Skript für 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. Außerdem ist es der einzige Code, der hp verändert. Stacheln, Kugeln 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. Deshalb prüfen die Stacheln den Wert, 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 weist health nur dann einen Wert zu, wenn ein Health-Skript vorhanden ist.

challenge icon

Aufgabe

Mittel

Sorge dafür, dass jeder Treffer zählt. Bullet ist bereit und ruft bei dem, was es trifft, TakeDamage(2) auf.

  1. Fülle in Health TakeDamage(int amount) aus: Ziehe Mathf.Max(amount - armor, 1) von hp ab.
  2. Protokolliere name + " hp: " + hp, zum Beispiel Dummy hp: 2.
  3. Rufe bei hp <= 0 Destroy(gameObject); auf.

Drücke „Spielen“ und schieße zweimal auf die Übungspuppe: Es wird Dummy hp: 2 protokolliert, dann verschwindet sie. Drücke anschließend „Prüfen“.

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), gib den verbleibenden Wert im Log aus und zerstöre das Objekt bei 0
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground