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

Skripting in Unity Grundkurs

Objekte per Skript erstellen

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Programmierer haben die Möglichkeit, dynamisch alle möglichen Objekte zu erstellen - und das sogar zur Laufzeit des Projektes. Schritt für Schritt geht dieser Film den Vorgang durch.
08:33

Transkript

In der vor uns liegenden Szene ist unsere Player_Box, unser abstrahierter Spieler bereits enthalten, und auch unser Unity-Mechaniker, Player_Human, ist bereits in der Szene drin. Wie wir das Ganze jetzt dynamisch machen sollen, schauen wir uns gemeinsam in diesem Video an, denn stellen Sie sich vor, Sie haben zum Beispiel in Ihrem Spiel mehrere Level enthalten, und wollen nicht jedes Level vorbereiten, mit einem bereits platzierten Spielerobjekt. Das Ganze soll das Skript übernehmen, oder irgendein Skript, und das soll bitte dynamisch bei Szenenstart, bei Spielstart passieren. Deshalb werde ich hier jetzt beide Objekte erstmal deaktivieren, jetzt ist auch keine Kamera gerade aktiv, das sehen wir, wenn wir in die Gameansicht klicken und hier ist alles grau. Und dann müssen wir noch dafür sorgen, dass wir irgendein Objekt haben, das unseren Spieler in die Szene lädt, oder in die Szene spawnt. Dafür habe ich hier ein leeres Objekt erzeugt, und den Namen Spawner vergeben, und auch schon ein Skript SpawnerCTRL erstellt, das ist zur Zeit noch ein komplett leeres Skript, das ich jetzt einfach nur auf unseren Spawner ziehen werde. Mit einem Doppelklick öffnen wir das, und wir haben hier vor uns ein leeres Standard-Skript, was von Unity bereits mit den altbekannten Funktionen gefüllt wurde. Um ein Objekt dynamisch zu laden, müssen wir einige Dinge beachten. Wir müssen natürlich zunächst dafür sorgen, dass wir überhaupt etwas haben, was geladen werden kann. denn wenn wir etwas laden wollen, muss das vorher bekannt sein. Dafür legen wir wieder eine Referenz an, die wir public machen, damit wir wieder schön im Inspektor von Unity damit arbeiten können, und das Ganze wird ein GameObject. Und das können wir jetzt zum Beispiel Player nennen, und diese Zeile erstmal finalisieren. Wir haben also jetzt eine Referenz, beziehungsweise eine Variable angelegt, vom Typ GameObject, und diese Player genannt. Ich sag dann immer gerne, wir haben uns sozusagen ein Fach vorbereitet, wo wir etwas reinlegen können, nämlich einen Player. Das Ganze muss man natürlich auch speichern, nicht vergessen, dann passiert auch nichts. Und hier haben wir jetzt unser Fach, das zur Zeit leer ist. Jetzt können wir natürlich nicht hergehen, und uns hier ein Objekt in dieses Fach ziehen, denn es ist ja so, das muss ja von irgendwo anders kommen. Es darf ja nicht bereits in der Szene sein, also hier in unserer Hierarchy aufgeführt sein, sonst bräuchte ich es ja nicht hinzuladen, dann wäre es ja schon da. Wir können aber durchaus auch hier unten in unsere Ordner schauen, und hier zum Beispiel vorbereitete Prefabs dynamisch in Szenen hinzuladen. Und hier haben wir natürlich auch unseren Player_Human, und genau den werde ich jetzt hier in das Fach ziehen, ich könnte ihn hier jetzt platzieren, wir sehen es, aber ich gehe noch ein bisschen weiter, auf dieses Fach und lasse dann die Maustaste los, und das ist jetzt eine Referenz auf eben dieses Objekt, was sich hier und hier in unserer Szene noch gar nicht befindet, aber das ist okay, das funktioniert durchaus. Wir haben jetzt also hiermit eine Referenz geschaffen auf dieses Objekt. Jetzt müssen wir damit natürlich noch irgendwas machen. Und da wir nicht unser Spieler-Objekt pro Frame reinladen möchten - kann ich ja gleich mal zeigen, was dann passiert - eigentlich möchten wir es ja nur einmal reinladen, und zwar in der Initialisierung über Start. Dafür gibt es den sogenannten Befehl instantiate. Da machen wir wieder Klammer auf Klammer zu, und finalisieren zunächst die Zeile. Jetzt fehlt hier natürlich noch was, instantiate möchte gewisse Dinge von uns haben. und wenn wir mit dem Cursor etwas länger darüber sind, dann möchte er auch wissen, was soll ich denn bitte instanziieren? Wenn ich nicht weiß, was ich instanziieren soll, dann kann ich auch nichts instantiieren. Nun, zu aller erst natürlich unser Player-Objekt. Jetzt ist das schon ein valider Befehl, und wir kucken uns mal an, was passiert, wenn wir jetzt die Szene starten. Wir merken uns, unser Spawner liegt hier, und ich werde jetzt instanziieren, und zack - da ist unser Player_Human. Wir sehen auch direkt, er hat natürlich nicht den gleichen Namen wie hier, oder wie unser bereits vorher platzierter Player_Human, den wir per Hand da reingepackt haben. Er hat den Namen Player_Human(Clone). Das macht Unity, um uns zu signalisieren, hier, lieber Programmierer, lieber Unity-Bediener, du hast das per Instanziierung reingeladen, das ist sozusagen ein Clone. Und in welcher Position befinden wir uns, wir befinden uns bei 0, 0.935, 0, und jetzt schauen wir mal, bei welcher Koordinate unser Prefab liegt, nämlich genau hier. Wenn wir hier die Werte anpassen würden - das machen wir mal gerade, geben hier 10 und 10 ein, und starten das Spiel dann, und schauen, wo unser Player_Human(Clone) liegt, dann wurden die Koordinaten übernommen. Es ist also egal, wo unser Spawner-Objekt liegt, es wird in diesem Fall die Koordinate des Prefabs übernommen, zumindest wenn wir unseren Befehl so lassen, denn instantiate kann noch mehr. Wir können hier nicht nur einen Parameter übergeben, nämlich welches Objekt soll ich überhaupt instanziieren, wir können hier ein Komma dahintersetzen, und dann bekommen wir die Vorschau, was denn noch möglich ist. Wir sehen hier also nicht nur, Object - ja, das Objekt, was wir instanziieren möchten, sondern auch Vektor3.position, also, wo soll ich das denn hinpacken, wo soll ich das denn instanziieren? Und dann auch noch eine Rotation. Ich werde diese Zeile jetzt mit diesen beiden Parametern mal finalisieren beziehungsweise erweitern, und ihm eher seine Position mitgeben und danach eine Rotation, und jetzt ist dieser Befehl auch fertig. Was steht denn jetzt hier, was haben wir denn jetzt hier? Vorher haben wir nur das Player da stehen gehabt, also instanziiere bitte nur den Player. Jetzt haben wir hier noch einen Ausdruck, der eine Position beschreibt. Das Ganze geht über einen Vektor3 für x, y und z, und dann kommt noch eine Rotation hinzu. Hier wird der Begriff Quaternion benutzt, das ist noch ein vielleicht etwas unbekannter Befehl, uns soll jetzt erst einmal nur interessieren, dass hinter diesem Ausdruck eine Rotation steckt, die nicht unbedingt repräsentiert wird über x-Rotation, y- und z-Rotation, sondern über etwas anderes, wichtig ist aber, dass wir uns merken, Objekt, Position, Rotation, können wir direkt also mitgeben, innerhalb dieses Befehls. Speichern wir das Ganze und merken uns mal die 5,5,5 und 0,120,0 - okay, und starten jetzt das Spiel, sehen wir, dass unser Clone an der Position 5,5,5 platziert wurde. Die 120 stimmt hier noch nicht ganz überein, denn ich hatte ja gerade erwähnt, diese Rotation, die wir hier erstellen, ist keine, die sich mit Rotation um x-, y- und z-Achsen repräsentieren lässt. Dafür steht hier der Begriff Quaternion. Der soll uns aber wie gesagt gar nicht stören, wir merken uns, instantiate kann entweder ohne Positions- und Rotationsangaben irgendetwas instanziieren, und es werden die Werte des Prefabs übernommen, alles schön und gut. Oder ich kann direkt eigene Positionen und Rotationen mitgeben, dann habe ich direkten Einfluss darauf, wo etwas platziert werden soll und mit welcher Rotation. Und jetzt machen wir des Spaßes halber nochmal folgendes, und instanziieren den Spieler im Update-Cycle, und sehen dann auch relativ schnell, warum wir das nicht tun sollten. denn was jetzt natürlich passiert, so schnell kann ich gar nicht klicken, wir haben einige hundert Clone in die Szene instanziiert, darauf sollte man natürlich auch achten.

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!