Skripting in Unity Grundkurs

Automatisches Ausrichten mit "LookAt"

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Funktion "LookAt" ist sehr hilfreich, wenn Sie Objekte auf andere Dinge "schauen" lassen wollen. In diesem Video geht es also darum, Objekte dynamisch auszurichten.
08:10

Transkript

Stellen Sie sich vor, Sie werden vor die Aufgabe gestellt, ein Objekt auf ein anderes Objekt auszurichten. Da könnte man jetzt anfangen, das Problem zu analysieren, was brauche ich dafür, Rotation, vielleicht Positionsänderung, aber in diesem Video schauen wir uns an, wie wir das mit einer Zeile Code erledigen können. Dafür habe ich zunächst hier in unserer Testszene ein ganz einfaches Objekt aus Grundobjekten zusammengebaut, das ist unser LookAt_Object. Hier habe ich auch schon ein Skript vorbereitet, LookAtCTRL, und das ziehe ich jetzt einfach nur auf unser LookAt_Object. Mit einem Doppelklick öffnen wir das Skript in Visual Studio, und jetzt stelle ich hier erstmal wieder meine normale Formatierung her, und dann ist das das altbekannte Skript, wie wir es gerade von Unity erstellt bekommen haben. Die eine Zeile Code, die dafür sorgt, dass das Objekt ausgerichtet wird, sieht folgendermaßen aus: Ich schreib die jetzt erstmal hier bei Start rein, das ist im Moment noch nicht ganz richtig, wir werden auch gleich sehen, warum. Der Befehl, damit das Objekt irgendwo hinschaut, also sich auf ein anderes Objekt ausrichtet, hat mit LookAt zu tun, deshalb habe ich das Ganze auch LookAt genannt. da fehlt allerdings noch etwas, und folgendermaßen müssen wir jetzt vorgehen: wir schreiben transform kleingeschrieben und dann LookAt. Um die Zeile zu finalisieren, benötigen wir zunächst eine runde Klammer auf und wieder zu, und dann ein Semikolon. Das ist jetzt erstmal in Ordnung, nur fehlt noch was innerhalb dieser Klammern. Zunächst kucken wir uns an, was haben wir denn da überhaupt gerade geschrieben? Wir greifen mit dem kleingeschriebenen transform immer auf die transform-Komponente zu, auf der das Skript liegt. Also auf dem Objekt liegt hier unser Skript LookAtCTRL, dieses Objekt hat natürlich auch eine transform-Komponente, wir meinen also genau diese hier. Das kleingeschriebene transform bedeutet, auf die greife ich zu, mit unserem Access Modified [inaudible] gehen wir eine Ebene tiefer, und dann greifen wir jetzt nicht zum Beispiel auf Position oder Rotation zu, sondern auf eine Funktion, die uns Unity von Haus aus bietet, und die eben LookAt heißt. Jetzt fehlt dieser Funktion noch etwas, nämlich worauf soll ich denn bitte schauen? Also stellen wir eine Referenz her, damit wir mit diesem Objekt arbeiten können. Das Ganze mache ich public, damit ich im Inspektor irgendein Objekt zuweisen kann, und hier nehme ich ein transform. Das heißt, ich sag das ja immer so gerne, wir bereiten jetzt ein Fach vor, wo wir etwas reintun können, und zwar dürfen wir da nur Objekte vom Typ Transform reintun. Das Ganze nenne ich LookAtOBJ für LookAt-Object, der Name ist hierbei ja egal fast, man sollte nur einen Namen wählen, der relativ repräsentativ ist. Und jetzt haben wir hier eine Referenz hergestellt, die wir der Funktion LookAt mitgeben können. Also, liebe LookAt-Funktion, kuck doch mal bitte auf das Objekt LookAt, was auch immer das ist. Hier dürfen wir jetzt nicht vergessen, erstens das Skript zu speichern, und zweitens, das wir hier auch wirklich ein Objekt zuweisen, denn das Ganze machen wir ja in Unity, wenn das Feld leer bleibt, hier also weiterhin None stehen bleibt, dann sagen wir der Funktion, kuck doch mal auf etwas, was gar nicht da ist. und sie würde wieder meckern, mit einer Null Reference Exception. Und jetzt suchen wir uns mal ein Objekt, auf das unser LookAt-Objekt schauen soll, und hier hinten haben wir so eine kleine Treppe, die merken wir uns, StepsPrototype, also kucken wir, wo unser LookAt_Object ist, und ziehen das einfach mal hier rein. Das hat soweit geklappt, die GameView ziehe ich jetzt mal nach hier unten, damit das gleich bei Spielstart nicht umswitcht, und dann kucken wir uns an, was passiert, wenn ich die Szene starte. und - zack, wir sehen, das LookAt_Object richtet sich automatisch aus. Wir haben also nichts weiter getan, als ein Skript zu erstellen, mit einer, zwei Zeilen Code, und diese eine Zeile Code hier unten sorgen schon komplett für das richtige Ausrichten des Objektes. Da ich das Ganze in Start platziert habe, geht folgendes jetzt leider nicht: Ich werde die Szene nochmal starten, wir erinnern uns, wir kucken auf diese Treppe hier, und ich schiebe sie umher, dafür muss ich sie natürlich erstmal dynamisch hier oben setzen, im Moment ist es static, und wenn ich sie jetzt verschiebe, dann kommt unser Objekt nicht mit. Für eine komplett automatische Ausrichtung müssen wir diesen Befehl jetzt natürlich hier ausschneiden, und bei Update einfügen. denn wir wissen ja, Update passiert once per frame, also einmal pro berechnetem Bild. das heißt, Bild 1 wird berechnet, Treppe ist an Position 1, kuck ich dahin. Bild 2 wird berechnet, Treppe ist an Position 2 okay, ich muss mich neu ausrichten, und ich passe mich daran an. Das Ganze sollte jetzt auch funktionieren, wir gehen nochmal in den Playmode, und jetzt können wir die Treppe Umherschieben, und unser Objekt richtet sich automatisch auf diese Treppe aus. Egal, wo sie sich befindet, unser LookAt_Object kommt hinterher. Das ist zum Beispiel sehr brauchbar, wenn man Kameras realisieren möchte, innerhalb seines Spiels, die dem Spieler folgen möchten, zum Beispiel. Hierbei gibt es jedoch einiges zu beachten: Wir sehen ja, das LookAt_Object hat eine gewisse Ausrichtung. Hier vorne ist die z-Achse, hier ist die x-Achse, hier die y-Achse, und das stimmt zur Zeit mit unserem Welt-Koordinaten-System, hier oben rechts sehen wir das, überein. Ich werde jetzt mal alle Kind-Objekte, alle Child-Objekte von diesem Objekt auswählen, und sie einfach mal drehen. Ich wähle da auch eine komplett falsche Rotation. so dass es ganz offensichtlich wird, das das eigentliche Vorne, was ja durch Unity in der z-Achse repräsentiert wird, nicht mehr wirklich mit unserem eigentlichen Vorne, was durch das Modell repräsentiert wird, übereinstimmt. Was wird jetzt passieren, wenn ich die Szene trotzdem nochmal starte? Unser Objekt richtet sich aus, wir sehen das, aber es stimmt nicht mehr mit dem Vorne des 3D-Modells überein. was ja irgendwo hier wäre. Denn was nämlich passiert ist, sehen wir jetzt: Die z-Achse wird auf das Objekt ausgerichtet, wenn ich das hier bewege - ah, da muss ich natürlich die ganze Treppe mitnehmen, und dann nochmal unser LookAt_Object aktiviere, sehen wir, ja, die z-Achse kommt mit. Was wir also dabei beachten müssen, ist, das alle Objekte, oder auch das Objekt selber, anhand der z-Achse ausgerichtet ist, das heißt, ich werde das Ganze hier jetzt noch einmal rückgängig machen, und jetzt stimmt auch das eigentliche Vorne mit dem von Unity, mit dem sozusagen Unity-Vorne überein, also mit der z-Achse. Das sollte man beachten, wenn man diese Funktion LookAt benutzt, denn was hier passiert ist, ich gebe ihm ein Objekt, "Bitte kucke hier drauf", und das tut unser Skript, beziehungsweise unsere Funktion anhand der z-Achse. Was wir also beachten müssen, wenn wir ein Objekt automatisch ausrichten möchten, sollten wir vorher die Achsen checken.

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!