Zerstören
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 67 von 85.
Destroy(obj) entfernt ein GameObject aus der Szene, einschließlich seiner Kinder. Ein zweites Argument verzögert das Entfernen: Destroy(obj, 2f) entfernt es in 2 Sekunden, und das Skript, das den Aufruf ausgelöst hat, läuft sofort weiter. Diese Kanone feuert bei Druck auf die 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. abgewiesen. Übergib außerdem 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 beendet ist.
Aufgabe
MittelRäume die alten Münzen weg und lass mit der Leertaste den Schacht verschwinden.
- Behalte die neue Münze,
GameObject coin = Instantiate(...);, und rufe dannDestroy(coin, 3f);auf. - Rufe bei
Input.GetKeyDown(KeyCode.Space)Destroy(gameObject);auf.Destroy(this)würde nur das Skript entfernen.
Drücke „Spielen“: Jede Münze verschwindet nach 3 Sekunden, und die Leertaste verhindert, dass neue erscheinen. Drücke dann „Prüfen“.
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;
}
// Leertaste: den Schacht zerstören
}
}
Alle Lektionen in Unity-Scripting: Grundlagen
1C#-Grundlagen in Unity
Hallo, UnityVariablenDezimalzahlen brauchen ein fText in der KonsoleVariablen, die sich etwas merkenIf und ElseZahlen vergleichenRückblick: Münzsammler7Schleifen und Methoden
Wiederholen mit forSchleifen in SchleifenEine Methode schreibenMethoden mit RückgabewertArraysRückblick: Treppe10Dinge finden
Nach Namen suchenTagsNach Typ suchenReferenzen schlagen SuchenUnitys NullRückblick: nächste Münze13Projekt: Weiche den Blöcken aus
Der LäuferBlöcke vom Himmel2Bring es in Bewegung
Platziere den WürfelBewege ihn in jedem FrameDrehe ihn jede SekundeSteuere mit den TastenRückblick: Fahre den Würfel5Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist eine StrukturRückblick: Drohnenpilot8GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter11Prefabs und Erzeugen von Instanzen
Prefabs und InstantiateNach Zeitintervall erzeugenIn einem Raster erzeugenListen von ObjektenDas Neueste zurücknehmenZerstörenZufälliges ErzeugenRückblick: Feuerwerk14Abschließende Herausforderungen
MünzmagnetDie Straße überquerenStraßenverkehrTurmbauerLanden oder verfehlen3Der Inspector
Inspector-FelderSerializeFieldFließkommazahlen und MathfInspector-AttributeRückblick: Aufzug6Transformationen und Hierarchie
Eltern und KinderHisse die FlaggeSkalierungDinge anschauenAuf einen Punkt zubewegenRückblick: Mond in Umlaufbahn9Projekt: Fang den Stern
Der FängerEin fallender Stern12Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle LoggerÜbe selbstständig: Unity-Playground