Skripting in Unity Grundkurs

Komponenten aktivieren/deaktivieren

Testen Sie unsere 1985 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Wie Sie Komponenten von Objekten dynamisch und per Skript ein- und ausschalten können, das vermittelt dieses Video.
06:36

Transkript

Skripts erlauben uns in Unity gewisse Abläufe und Funktionen dynamisch und zu Laufzeit des Programms auszuführen. Das heißt, während unser Spiel, unser Projekt läuft können wir dynamisch gewisse Dinge tun. Und dazu gehört auch das Aktivieren beziehungsweise Deaktivieren von Komponenten. Wie das geht, schauen wir uns jetzt in diesem Videon an. Wir haben hier ein Objekt TurningObject. ganz einfach mit einem Skript versehen und wenn ich mal direkt in den Playmode gehe, sehen wir, das Skript scheint dafür zu sorgen, dass sich das Objekt ganz simpel dreht. Das ist natürlich hier über die Komponente RingTurner, also über das Skript RingTurner gelöst und wir schauen auch gleich mal rein und wir sehen, da steht nicht viel drin, eigentlich sorgt nur dieser Befehl, der in Update, das heißt, einmal pro Frame aufgerufen wird. Jetzt möchte ich, dass zum Beispiel beim Start, also in der Funktion Start diese Komponente, dieses Skript um das es sich hier gerade handelt, genau das was wir uns hier gerade anschauen deaktiviert wird. Per Hand würden wir jetzt folgendes tun: Wir würden uns die Komponente suchen, die wir deaktivieren möchten, mit Transform geht das natürlich nicht, aber mit allen weiteren und würden hier die Komponente deaktivieren und wieder aktivieren. Aber genau das möchten wir ja jetzt automatisieren. Wir gehen also in das Skript rein und sagen du, liebes Skript deaktivierst dich mal selbst. Da erinnern wir uns, ein Skript selbst ist ja auch immer eine Komponente. Mit folgender Zeil Code können Sie Komponenten deaktivieren. Wir gehen her und benutzen den Schlüsselausdruck GetComponent. Wie der name schon sagt, wir holen uns also eine Komponente. Weil wir hier nur GetComponent benutzen und nichts davor steht, heißt das immer, hole mit bitte die Komponente von genau dem Objekt auf dem auch dieses Skript, wo in nun mal GetComponent drin geschrieben habe, draufliegt. Also von unseren TurningObject. Hier sind jetzt nicht viele Komponenten drauf und die Transform Komponente können wir sowieso nicht deaktivieren, also bleibt nur noch eine, wir deaktivieren uns quasi selbst, wir deaktivieren den RingTurner, also schreiben wir das in spitze Klammern jetzt rein und machen das Ganze sozusagen zu Funktion, indem wir ein runde Klammer auf und zu dahinterschreiben. Diese Zeile macht also, beziehungsweise stellt eine Referenz auf genau dieses Skript, auf genau dieser Komponente her. Jetzt benutzen wir wieder den Access Modifier, wir sagen also, OK, die Komponente haben wir uns jetzt geholt, was wollen wir jetzt damit machen? Und benutzen hier das Schlüsselwort enabled. Komponente geholt und dann aktivieren oder deaktivieren? Und jetzt können wir sagen =true jetzt wäre sie aktiviert oder aber auch false. Mit einem Semikolon finalisieren wir diese Zeile, diesen Befehl und setzen also diese Komponente enabled auf nicht Wahr, auf false. Speichere das Ganze, gehe zurück in Unity und starte einfach mal das Spiel. Und wir sehen, noch bevor sich das Objekt anfangen kann zu drehen ist die Komponente auch schon deaktiviert. Ich kann das per Hand natürlich jetzt wieder aktivieren und es würde sich nicht wieder deaktivieren, weil Start, ja nur ein einziges mal , bevor quasi das ganze Spiel anläuft, ausgeführt wird. Möchte ich jetzt beispielsweise eine andere Komponente deaktivieren, zum Beispiel auch auf dem selben Objekt ziehe ich einfach mal ein weiteres Skript hier drauf, gehe dann in mein Skript, wo ich aktivieren oder deaktivieren möchte und tausche einfach RingTurner, zum Beispiel gegen Variables aus. Das haben wir uns gemerkt, hier Variables, so heißt die Komponente, dann tragen wir das hier ein und was passiert? Na klar die Komponente wird deaktiviert. Genau so funktioniert das natürlich auch mit Remote beziehungsweise mit externen Objekten. Hier müssen wir nur wieder für eine Referenz auf dieses externe Objekt sorgen. Wir sagen zum Beispiel public GameObject ich möchte jetzt also ein GameObject hier referenzieren und sage remote beziehungsweise nenne es remoteOBJ für remote Object und kann dann wieder hergehen und sagen, nehme mir bitte das remote Object, dann wieder GetComponent, zum Beispiel auch wieder Variables und enabled. Natürlich zu Funktion, dass darf man nicht vergessen: enabled=false. Wofür wir allerdings immer Sorgen müssen ist, dass diese Komponente,die wir hier suchen, auf die wir hier zugreifen tatsächlich vorhanden ist. Denn es kann ja mal sein, dass wir hier durchaus ein remodeOBJ zuweisen, zum Beispiel unsere Box, aber auf dieser Box gibt es überhaupt keine Komponente Variables. Aber auf genau die greifen wir ja nunmal zu. Was jetzt passieren wird ist folgendes: Ich starte mal das Spiel und wir bekommen eine sogenannte NullReferenceException. Das ist ein Fehler der uns sagt, moment, hier versuche ich auf etwas zuzugreifen was gar nicht da ist. Das kann ich also gar nicht. Ich kann ja ein Doppelklick drauf machen und der wird mir sofort zeigen, Achtung hier ist der Fehler, hier stiimmt was nicht, denn remoteOBJ.GetComponent gibt es nicht, also kann ich da auch nichts aktivieren und deaktivieren. Das ist eine weitere Fehlerquelle auf die man achten muss, wenn ich etwas deaktivieren, aktivieren muss und das ist vielleicht von externen, muss ich auch dafür sorgen, dass dieses Objekt auch wirklich da ist. Sollte jetzt kein Problem mehr für Sie sein Komponenten, etweder auf dem Objekt selber oder vielleicht auch bei externen Objekten zu aktivieren oder zu deaktivieren. Achten Sie nur darauf, dass die Komponente auch wirklich vorhanden ist, das wir keine NullReferenceException bekommen.

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!