Menu
CoddyTech

Sammelobjekte

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

Ein aufnehmbares Objekt ist ein Trigger mit einem eigenen Skript. Wenn etwas hineingerät, prüft das aufnehmbare Objekt, ob es sich um den Spieler handelt, übergibt seinen Effekt und zerstört sich selbst. Das Skript des Spielers behält das Ergebnis und stellt dafür eine öffentliche Methode bereit. Dieses Gesundheitspaket heilt alles, was ein Health-Skript hat:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, am Spieler
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) ist false, wenn eine Kiste in das Paket hineingleitet. Daher kann es nur ein Objekt mit einem Health-Skript aufnehmen, und ein Spieler mit voller Gesundheit lässt das Paket für später liegen. Das Paket findet den Spieler über other, sodass kein Paket eine Inspector-Referenz benötigt und ein Level fünfzig davon enthalten kann. Heal ist public, weil ein anderes Skript die Methode aufruft, und die Obergrenze von 100 liegt in Health, dem einzigen Ort, der hp verwaltet. Destroy(gameObject) entfernt das Paket; Destroy(other.gameObject) würde den Spieler entfernen.

challenge icon

Aufgabe

Einfach

Der Spieler trägt einen Blaster: ammo (zu Beginn 4) und maxAmmo (10). Die Pfeiltasten bewegen ihn und mit der Leertaste wird ein Schuss abgefeuert; beides ist bereits geschrieben. Sorge dafür, dass die Munitionskisten ihn wieder auffüllen:

  • Füge in Blaster.cs eine öffentliche Methode int AddAmmo(int amount) hinzu. Sie nimmt so viel von amount, wie unter maxAmmo passt, protokolliert die neue Gesamtmenge, zum Beispiel Ammo: 7, und gibt zurück, wie viel sie genommen hat.
  • Biete in AmmoCrate.cs dem Blaster, wenn der Spieler eine Kiste betritt, deren amount an und ziehe ab, was genommen wurde. Eine nun leere Kiste wird entfernt; eine Kiste mit verbleibender Munition bleibt mit dem Rest für einen späteren Besuch bestehen.

Die erste Kiste enthält 3 und die zweite 5. Drücke Play, gehe nach rechts, feuere ein paar Schüsse ab und gehe zurück in die zweite Kiste, dann Check.

Probier es selbst

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // Der Blaster des Spielers nimmt so viel auf, wie hineinpasst; die Kiste behält den Rest und verschwindet, sobald sie leer ist
    }
}
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