Zerstören
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 52 von 67.
Destroy(obj) entfernt ein GameObject aus der Szene, einschließlich seiner Kinder. Mit einem zweiten Argument wird die Entfernung verzögert: Destroy(obj, 2f) entfernt es in 2 Sekunden, und das Skript, das den Aufruf ausgelöst hat, läuft sofort weiter. Diese Kanone feuert mit der Leertaste, und jede Kugel, die sie erzeugt, verschwindet 2 Sekunden später:
public GameObject bulletPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
Destroy(bullet, 2f);
}
}Übergib die Kopie, nicht das Prefab: Destroy(bulletPrefab) wird mit Destroying assets is not permitted to avoid data loss. abgelehnt. Und übergib ein GameObject, wenn du das Objekt meinst. Innerhalb eines Skripts ist gameObject das Objekt, auf dem sich das Skript befindet. Daher entfernt Destroy(gameObject) dieses Objekt, während Destroy(this) nur das Skript entfernt und das Objekt bestehen lässt.
Destroy wird niemals sofort ausgeführt. Unity entfernt das Objekt am Ende des aktuellen Frames, nach den Aufrufen von Update() und LateUpdate() des Frames. Daher werden die Zeilen nach Destroy weiterhin ausgeführt, und das Objekt kann noch gefunden werden, bis der Frame vorbei ist.
Aufgabe
MittelDer Schacht lässt jede Sekunde eine Münze fallen; dieser Teil ist bereits geschrieben. Ändere es so, dass:
- jede Münze 3 Sekunden nach ihrem Erscheinen verschwindet, sodass nie mehr als 3 Münzen gleichzeitig da sind;
- die Leertaste den Schacht selbst zerstört, sodass keine weiteren Münzen mehr kommen. Die bereits ausgegebenen Münzen verschwinden weiterhin rechtzeitig.
Drücke Play, beobachte das Ganze einige Sekunden lang, drücke die Leertaste und dann Check.
Probier es selbst
using UnityEngine;
public class CoinChute : MonoBehaviour
{
public GameObject coinPrefab;
public float interval = 1f;
float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
Instantiate(coinPrefab, transform.position, Quaternion.identity);
timer -= interval;
}
// Space: den Schacht zerstören
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen des Scripting in Unity
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter9Prefabs und Spawnen
Prefabs und InstantiateNach Timer spawnenIn einem Raster spawnenObjektlistenZerstörenZufälliges SpawnenRückblick: Feuerwerk