Skripting in Unity Grundkurs

Objekte zerstören

Testen Sie unsere 1985 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Der Programmcode eines Skripts lässt Sie Objekte während der Laufzeit des Projektes zerstören. Sehen Sie, welche Schritte dafür nötig sind.
06:37

Transkript

Dynamisch zur Laufzeit während eines Programms, irgendetwas mit Objekten zu machen, ist eine der Hauptaufgaben von Skript, und dazu gehört natürlich auch, Objekte zu zerstören, während man mit ihnen etwas macht. In diesem Video geht es genau darum, und wir werden sehen, wie wir nicht nur Objekte freiwillig selber zerstören lassen können, sondern wie wir auch per Remote, per externem Zugriff, andere Objekte von einem dritten Objekt zerstören können. Beginnen wir damit, zunächst ein leeres GameObjekt zu erstellen, das ich ganz klassisch Destroyer nenne. Dieses Objekt soll jetzt für die Zerstörung eines anderen Objektes sorgen. Dafür brauchen wir natürlich ein Skript, das erstelle ich mir hier unten über Create C# Script und dann nenne ich das DestroyScript. Doppelklick - natürlich die Warnmeldung, wieder per Reload einfach wegklicken, und hier sind wir in unserem altbekannten Skript, in unserem von Unity vorbereiteten Skript. Natürlich, immer dann, wenn wir von einem anderen Objekt, von einem anderen Skript irgendwo hin möchten, auf ein anderes Objekt, müssen wir eine Referenz herstellen. Das machen wir mal schnell, ich mache das Ganze über eine public-Variable, das Ganze soll ein GameObject nennen, und das nenne ich objectToDestroy, also das Objekt, was zerstört werden soll. Das ist erstmal eine komplett leere Referenz, beziehungsweise ein leeres Objekt, wir haben noch nichts zugewiesen, jetzt dürften wir auch eigentlich noch nicht damit arbeiten, denn folgendes haben wir noch nicht getan: Erstens, wir haben das Skript nicht auf irgendein GameObject innerhalb unseres Spiels gezogen, das machen wir jetzt, und dann ist hier natürlich das Feld noch leer. Wenn ich jetzt versuche, damit irgendwas zu machen, kommt die altbekannte NullReferenceException, das heißt, lieber Programmier, du versuchst da etwas zu tun mit einem Ding, was noch gar nicht da ist, und das kann ich nicht. Das heißt, was ich jetzt mal versuchen werde, ich werde einfach unsere gesamte Szene hier reinschmeißen, obwohl das ein Objekt ist, was Unterobjekte hält, und diese Szene versuchen zu zerstören, zu löschen bei Start. Start ist ja unser altbekannter Zeitpunkt der Initialisierung, das heißt, diese Funktion wird auch nur einmal bei Spielstart ausgeführt. Und hier gehe ich jetzt her und arbeite mit objectToDestroy. Das kopiere ich mir mal gerade, füge das hier ein, und der Access Modifier sagt wieder, ja, du hast dieses Objekt. Punkt, Access Modifier, was möchtest du jetzt damit machen? Und dann benutzen wir das Schlüsselwort - halt, nochmal, stop, da habe ich mich vertan, fangen wir bei dem Kopieren nochmal an, deshalb kopiere ich mir jetzt unser Objekt objectToDestroy erstmal hier in unserer Startroutine, Start wird ja einmal bei Initialisierung, beim Start des Spiels aufgerufen, und jetzt benötigen wir noch das Schlüsselwort Destroy, beziehungsweise die Funktion Destroy. Diese Funktion möchte auch wieder was von uns haben, so sähe sie erstmal aus, das wir - das schneide ich mal gerade aus - und dann - wenn wir mit dem Mauscursor länger über einer Funktion bleiben, dann kriegen wir immer so eine kleine Erklärung, diese Funktion möchte jetzt von uns ein Objekt haben. Da wir hier oben objectToDestroy haben, fügen wir das doch einfach mal in die runden Klammern ein, und das war's eigentlich auch schon. Diese eine Zeile, dieser Befehl sagt jetzt folgendes: Bei Spielstart in der Initialisierung gehe her und zerstöre das Objekt, was ich dir nun mal mitgebe. Alles klar, wir haben gespeichert, STRG+S, oder hier oben, die kleine blaue Diskette, und dann starten wir einfach mal das Spiel, wir vergewissern uns nochmal, ja, dieses Feld, die Variable ist nicht leer, da liegt etwas drin, und dann starten wir das Spiel, und schwupps - wir sehen, alle sind weg. Das ist natürlich jetzt auf den ersten Blick erstmal doof. Wir haben unsere ganze Szene gelöscht, war vielleicht ein schönes Level, wo wir lange dran gebaut haben, das ist jetzt erstmal weg. Aber keine Angst, das ganze passiert ja zur Laufzeit, alle Änderungen sind jetzt nur während dieser Laufzeit zu spüren, sie wirken sich nur während dieser Laufzeit aus. Wenn ich jetzt aus dem Playmode wieder herausgehe, oder später das fertige Spiel beenden würde, dann würde genau das passieren, was auch hier passiert: es ist natürlich immer noch da. Die Auswirkung Szene gelöscht ist nur für die Laufzeit wichtig. Wenn wir jetzt wollen, dass das eigene Objekt gelöscht wird, also das, auf dem unser Destroy-Skript in diesem Fall liegt, wäre es noch einfacher. Dann bräuchten wir hier oben diese Referenz auf ein drittes oder anderes Objekt gar nicht, sondern würden hier einfach das klein geschriebene gameObject reinschreiben. Denn das kleingeschriebene gameObject bezieht sich immer auf das Objekt, auf dem das Skript liegt, wo wir dieses kleingeschriebene gameObject nun mal geschrieben haben. Also jedes Skript, das auf einem GameObject liegt, und das den Begriff gameObject kleingeschrieben enthält, bezieht sich mit dem Befehl auf das Objekt selbst. Das heißt, wir kucken uns dieses Beispiel an, was passiert, und auch der Destroyer ist jetzt noch da, aber er löscht sich selbst, sobald das Spiel startet. Diesen Befehl kann man natürlich zu jedem beliebigen Zeitpunkt benutzen, was nicht ganz funktionieren würde, ist folgendes: Wenn ich diese Funktion im Update zeige, also once per frame, einmal pro berechnetem Bild ausführen würde, würde das beim ersten Bild noch funktionieren. Dann würde natürlich gar nichts weiter passieren, denn danach ist das Objekt gelöscht, dann kann auch kein Skript, und auch keine Funktion zum Löschen ausgeführt werden. Wir haben nun also gelernt, wie wir Objekte zerstören können, einmal wie wir das Objekt selbst zerstören können, auf dem unser Zerstör-Skript liegt, oder wie wir dafür sorgen können, dass Objekte zerstört werden, die über ein Kontrollskript kontrolliert werden, wieder per Referenz.

Skripting in Unity Grundkurs

Greifen Sie mithilfe von C#-Skripts dynamisch in Ihr Unity-Projekt ein. Auch Programmier-Neulinge lernen Schritt für Schritt den Einstieg ins Skripting.

4 Std. 50 min (40 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Anleitung für Unity 5-Nutzer:

  • Schritt 1: Projekt in Unity 5 öffnen und die Meldung bestätigen, dass das Projekt ein Upgrade bekommt.
  • Schritt 2: Wenn die Meldung kommt, dass die API upgedatet werden muss, diese auch bestätigen

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!