Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Skripting in Unity Grundkurs

Objekte finden

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Manchmal muss man dynamisch zur Laufzeit eines Programms nach Objekten suchen. Hier kann Ihnen die Find-Anweisung weiterhelfen.
07:50

Transkript

Skripts sind natürlich dafür da, um gewisse Dinge automatisch ablaufen zu lassen, und so kann man sie auch nach Objekten, mit denen man später arbeiten möchte, suchen lassen. Schauen wir uns jetzt einmal gemeinsam an, wie man das macht. Sagen wir, wir möchten irgendein Objekt haben, was nach dieser Box sucht, also nach dem Objekt hier oben, Player Box. Dafür erstelle ich zunächst ein leeres GameObject, über die Funktion Create Empty, und das nenne ich einfach mal Finder zum Beispiel. Jetzt erstelle ich hier ein neues Skript über die Funktion Create See sharp Script. und nenne das einfach mal Finder Script. Mit einem Doppelklick öffnet sich Visual Studio, die aufklickende Warnmeldung wie immer einfach reloaden, und schon ist das gegessen. Und jetzt sorgen wir wieder dafür, dass wir ein Objekt haben, mit dem wir in diesem Skript arbeiten können. Das heißt, wir müssen wieder eine Referenz zu einem Objekt herstellen. Hierbei ist jetzt darauf zu achten, dass wir über den Namen suchen können. Dafür gibt es die Funktion gameObject.find Das können wir jetzt allerdings nicht hier oben hinschreiben, denn hier oben würden ja erstmal nur Variablendeklarationen passieren, und das ist bereits eine Funktion, die müsste hier irgendwo weiter unten stehen. Wir sorgen zunächst dafür, dass wir quasi die Referenz erstmal vorbereiten, also zum Beispiel gameObject obj, zum Beispiel. für einfach ein abstraktes Object. So. Was wir jetzt haben, ist noch keine Referenz, denn wir haben eigentlich nur gesagt, liebes Skript, merk dir mal irgendein gameObject obj. Das können wir auch anders nennen, wir haben das gameObject obj erstmal nur deklariert. aber wir können jetzt noch nichts damit machen, es ist noch leer. Um das j zu belegen, kommt jetzt gameObject.find ins Spiel. Diese Funktion erwartet etwas von uns, und wir bekommen auch, wenn wir die Klammer auf und Klammer zu setzen, direkt hier gesagt, was das denn sein soll, nämlich ein String. Das heißt, diese Funktion erwartet jetzt eine Buchstabenkette. Bei Strings müssen wir immer Anführungszeichen setzen, und Visual Studio ist da nett zu uns, und vervollständigt gleich das zweite Anführungszeichen. Wir finalisieren jetzt schon mal diese Zeile, und jetzt wäre das ein Begriff beziehungsweise ein Ausdruck, der völlig okay ist, der würde funktionieren. Was natürlich noch fehlt, ist der Name des Objektes, das wir nun mal finden möchten. Hierbei ist es jetzt auch wichtig, dass wir uns diesen Namen ganz genau, hundertprozentig genau merken. am besten, wir kopieren ihn uns, wenn er vielleicht ein bisschen komplexe Sachen, wie vielleicht einen Unterstrich hat, oder gewisse Wortteile beginnen plötzlich groß und wir haben sie falsch klein geschrieben, deshalb werde ich das jetzt auch mal tun, ich kopiere unseren PlayerBox Begriff, wechsele zurück in Visual Studio, und füge diesen Namen zwischen den Anführungszeichen ein. Was jetzt also passiert. Am Zeitpunkt Start bei unsere Initialisierung, wird nach einem GameObject gesucht. Die Funktion GameObject.find geht also her, und durchsucht unsere gesamte Szene, alle Unterpunkte, ob denn irgendein Objekt den Namen trägt, den wir hier eingetragen haben. Und wenn man sich diesen Satz nochmal vergegenwärtigt, alle Objekte werden dadurch durchsucht, wird einem schnell klar, dass dieser Begriff dieser Ausdruck, dieser Befehl, den wir hier haben, relativ langsam ist, unperformant, in Vergleich zu anderen Dingen. Nichtsdestotrotz wird dieser Befehl ausgeführt werden. und damit wir ein Ergebnis sehen, mache ich das Ganze public hier oben, dann sehen wir ja auch ein Feld im Inspektor, natürlich muss ich das Finder-Skript unserem Finder erst einmal zuweisen, und hier haben wir unser Feld, was wir bisher immer gemacht haben, was auch möglich wäre, wir können die Player Box natürlich hier direkt einfügen. Jetzt braucht auch nicht mehr danach gesucht werden. aber das wollen wir ja nicht, wir wollen ja dieses Feld erstmal leer haben, das soll ja der Automatismus für uns machen. Dafür reicht dieser Befehl hier aber noch nicht. Im Moment wird nur danach gesucht, es wird wahrscheinlich auch was gefunden, wenn wir uns beim Namen nicht vertan haben. aber es wird noch nirgendwo zugewiesen, quasi sagt der Compiler oder das Programm: "Ja, ich finde da was, aber wohin soll ich denn das jetzt packen?" Deshalb müssen wir jetzt unser Objekt obj, das vorher noch nicht belegt war, belegen. Wir weisen diesem Objekt etwas zu, und zwar das, was durch diese Suche herauskommt, das Ergebnis dieser Suche. Und wenn wir jetzt in Unity die Szene starten, dann sehen wir, es wurde automatisch die Player Box gefunden. Das Ganze ging natürlich jetzt relativ schnell. Wir haben hier auch nicht ganz so viel Objekte in der Szene, das ist noch überschaubar, das kriegt auch das Programm noch in einer akzeptablen Zeit hin. Aber nichtsdestotrotz muss man sich hier merken, dieser Befehl ist langsam, und man sollte angehalten sein, nach Namen niemals im Update-Zyklus zu suchen. Generell niemals zu Zeitpunkten, die einmal pro Frame passieren. Weil stellen Sie sich folgendes vor, wir haben 60 Bilder pro Sekunde, ich starte hier mal gerade nebenher das Spiel, mache die Statistiken an, und wir sehen, es sind sogar mehr Frames, zur Zeit fast 200 bis 400 Frames pro Sekunde, das heißt, wenn wir eine Suche nach einem Klarnamen hier haben, müsste das 200 bis 400 Mal pro Sekunde passieren. Und was ich jetzt einfach mal zur Anschauung tun werde, ich kopiere mir diesen Befehl in den Update-Zyklus, once per frame wird das jetzt aufgerufen, und wir sehen, was passiert, aus diesen 200 bis 400 Frames - an die 400 reichen wir jetzt hier nur selten heran - Das Ganze würde sich natürlich ungemein aufpotenzieren, wenn noch mehr Objekte in unserer Szene wären, oder wenn der Name etwas komplexer wäre, Hier möchte ich Ihnen also den Tipp mit an die Hand geben, diese Suche nach einem Klarnamen, nach einem String, niemals in einen Update-Zyklus oder in irgendeine Funktion hineinzupacken, die per Frame, also einmal pro berechnetem Bild passiert. Sowas sollte man immer nur einmalig tun, Start zum Beispiel dient der initialisierung, passiert ja nur einmal, Okay. Zusammengefasst haben wir nun also eine Möglichkeit kennengelernt, wie wir Objekte dynamisch finden können, wie wir uns die Aufgabe sparen können beziehungsweise den Arbeitsschritt, Sachen per Hand einer Variable zuzuweisen. Vielleicht versuchen Sie auch selber einmal, gewisse Objekte zu suchen, und lernen einfach einmal die Handhabung dieses Befehls kennen.

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!