Menu
CoddyTech

Sammelobjekte

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

Ein aufhebbarer Gegenstand ist ein Auslöser mit einem eigenen Skript. Wenn etwas hineingerät, prüft der Gegenstand, ob es sich um den Spieler handelt, überträgt 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 für eine Kiste, die in das Paket hineingleitet, false. 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 es aufruft, und die Obergrenze von 100 befindet sich in Health, dem einzigen Ort, an dem hp verwaltet wird. Destroy(gameObject) entfernt das Paket; Destroy(other.gameObject) würde den Spieler entfernen.

challenge icon

Aufgabe

Einfach

Lass die Munitionskisten den Blaster auffüllen (ammo 4, maxAmmo 10).

  1. Füge in Blaster.cs public int AddAmmo(int amount) hinzu: int taken = Mathf.Min(amount, maxAmmo - ammo);, addiere den Wert zu ammo, gib "Ammo: " + ammo aus und gib taken zurück.
  2. Rufe in AmmoCrate.cs, wenn other.TryGetComponent(out Blaster blaster) zutrifft, blaster.AddAmmo(amount); und Destroy(gameObject); auf.

Drücke auf „Spielen“ und gehe nach rechts: In der Konsole wird Ammo: 7 und dann Ammo: 10 angezeigt. Drücke anschließend auf „Prüfen“.

Probier es selbst

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // Der Blaster des Spielers nimmt die Munition auf, und die Kiste verschwindet
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground