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.
Aufgabe
EinfachDer 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.cseine öffentliche Methodeint AddAmmo(int amount)hinzu. Sie nimmt so viel vonamount, wie untermaxAmmopasst, protokolliert die neue Gesamtmenge, zum BeispielAmmo: 7, und gibt zurück, wie viel sie genommen hat. - Biete in
AmmoCrate.csdem Blaster, wenn der Spieler eine Kiste betritt, derenamountan 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
}
}
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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand