Skripting in Unity Grundkurs

Springen und Sprinten

Testen Sie unsere 1985 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Möchte man seinen Charakter nicht einfach nur bewegen, sondern auch springen oder rennen lassen, werden weitere Zeilen Programmcode nötig. Welche das sind, lernen Sie in diesem Video.
12:03

Transkript

Hier vor uns haben wir einen Charakter, unseren Unity-Mechaniker, der schon eine Positionsänderung einprogrammiert hat, das heißt, wir haben schon eine Art der Bewegung, die ist natürlich noch ein bisschen starr und ein bisschen hakelig, aber wir haben das Problem, ich möchte jetzt eine Bewegung umsetzen, schon in kleine Teile aufgesplittet und schon mal eine Positionsänderung realisiert. Jetzt könnten wir uns zum Beispiel darum kümmern, dass wir springen, oder einen Umschalter von rennen und gehen haben. Um das Springen umzusetzen füge ich jetzt zunächst einen Rigidbody unserem Player_Human hinzu, und sorge dann, über die Constraints, mit Freeze Rotation X und Z dafür, dass er nicht nach vorne und hinten umkippt. Wir schauen mal, ob soweit alles funktioniert hat, er sollte nach unten fallen, und wir können uns auch noch immer bewegen, und er kippt nicht um. So weit, so gut. Springen kann er jetzt noch nicht, aber das Springen möchte ich jetzt mit der Funktion AddForce umsetzen. Auf dem Spieler liegt hier schon das Script Player_Move. Das öffnen wir, und hier sehen wir, das bereits die Positionsänderung umgesetzt ist, und hier fügen wir jetzt den Zugriff auf den Rigidbody hinzu. mit dem Schlüsselwort kleingeschriebenes rigidbody. Wie gesagt, die Funktion AddForce ist jetzt hier unsere gewünschte Funktion, um das Springen umzusetzen, und AddForce braucht einen Vector 3, um zu wissen, was soll ich für eine Kraft hinzufügen. Diese Kraft möchte ich aber jetzt dynamisch haben, ich möchte hier jetzt keinen festen Wert eintragen, also, lege ich hier oben eine neue Variable, vom Typ Vector 3 an, denn AddForce braucht einen Vector 3, und die Variable nennen wir zum Beispiel jumpPower. Jetzt haben wir nirgendwo einen festen Wert eingetragen, lieber Player, lieber Unity-Mechaniker, so hoch darfst du springen, sondern wir sagen einfach nur, bitte nimm den Vector 3 jumpPower, natürlich noch die Klammer schließen, und dann ist das schon hier so weit erledigt. Zurück in Unity, schauen wir uns an, was das mit unserem Script gemacht hat, aha, hier haben wir jetzt Zugriff auf X,Y und Z vom Vector 3 jumpPower. Und hier werde ich jetzt einfach mal eine 2 hinzufügen, und dann gucken wir mal was passiert, denn wenn wir genau schauen, passiert das: AddForce pro Frame, das ist natürlich im Moment noch nicht ganz richtig, er soll ja nur springen, wenn wir zum Beispiel die Leertaste drücken, aber wir schauen mal was passiert, wenn ich jetzt die Szene starte. Wir sehen, okay, da passiert nicht viel, aber an dieser Stelle versichere ich Ihnen, die Kraft wird auf unseren Mechaniker durchaus ausgeführt. Allerdings wirken hier jetzt zwei Kräfte gegeneinander, denn in unserer Szene herrscht Schwerkraft. Wenn ich unseren Unity-Mechaniker so ein bisschen nach oben ziehe sehen wir sofort, der fällt nach unten, daran können wir sehr gut erkennen, es herrscht Schwerkraft, und unser Rigidbody sagt auch, ja, ich benutze diese Schwerkraft. Wenn wir jetzt aber mit einer Kraft von 2 entgegenwirken, und die Schwerkraft ist hier auf den Standardwert -1,981 eingestellt, wird natürlich nicht viel passieren. Wir heben nur so ein bisschen die Schwerkraft aus, aber 2 gegenüber -1,9, das macht nicht viel aus. wenn ich hier jetzt allerdings eine 10 eintrage, sehen wir wie unser Mechaniker, und tschüss, langsam davon schwebt. Jetzt ist unsere Jump-Power höher als die Schwerkraft, und unser Mechaniker kann fliegen. Wir können uns diesen Wert ja mal merken und ihn ein bisschen erhöhen, zum Beispiel 12, und das Ganze jetzt von Input abhängig machen. Und ich bleibe mal bei der Leertaste, und werde dann per Key-Abfrage, die Leertaste abfragen. Also Input.getkey und zwar GetKeyDown, weil ich nicht permanent die Leertaste abfragen möchte, sondern nur in dem Moment, in dem man sie wirklich drückt. Und das Ganze wird dann ja per KeyCode gesteuert und die Leertaste wird hier mit Space repräsentiert. Diese Bedingung haben wir jetzt geschrieben, jetzt müssen wir unsere vorherige Anweisung AddForce, nur noch in den Rumpf dieser if-Bedingung reinsetzen, und das haben wir hier jetzt erledigt. Innerhalb der geschweiften Klammern unserer Bedingung befindet sich nun AddForce. Zurück in Unity, werden wir jetzt schauen, ob das Ganze funktioniert hat, wir fliegen zumindest nicht mehr davon, wir können uns noch bewegen, und wenn wir jetzt die Leertaste drücken, ah, da passiert auch noch nicht viel. Vielleicht ist unsere Jump-Power doch noch ein bisschen zu niedrig, ich mache daraus mal eine 50, und jetzt sehen wir, oh, da passiert schon was! Und eine 100, lässt das Ganze noch höher springen. Vielleicht eine 1000, ja, das ist ein bisschen hoch, jetzt hat er sehr gute Sprungkräfte, aber Sie sehen schon, hier beginnt das sogenannte Tweaking, denn wir haben eine grundsätzliche Funktionalität erst mal umgesetzt, und jetzt muss sie nur noch mit richtigen Werten gefüttert werden. Natürlich könnte man noch andere Funktionen als AddForce machen, man könnte ein Springen auch komplett anders, als wie hier über den Rigidbody umsetzen, aber das ist ein erster guter Weg, um Springen zu realisieren. Jetzt machen wir noch einen Umschalter zwischen schneller und langsamer Geschwindigkeit. Dazu werde ich zunächst unsere schnelle und langsame Geschwindigkeit definieren. Also: public float, zum Beispiel walkSpeed und public float runSpeed. Unsere walkSpeed soll unsere normale Geschwindigkeit sein. Diese müssen wir jetzt noch koppeln, mit unserer Positionsänderung. Im Moment passieren die hier, für die horizontale Achse, und hier für die vertikale Achse vorne und hinten. Was wäre denn, wenn wir das Ganze also mal Multiplizieren mit walkSpeed? Und hier unten genauso, da eine Klammer drumherum, um diesen ganzen Ausdruck: * walkSpeed. Unsere Werte bei walk- und runSpeed sind zur Zeit 0, das heißt, wenn wir uns jetzt bewegen wollen, dann passiert nicht viel. Hier, was also im Visual Studio passiert, hier werden Werte * 0 multipliziert, und das funktioniert nicht, denn dann heißt es, meine neue Position ist immer 0, und das würde nichts bewirken. Machen wir hier aber eine 1 draus, haben wir die Möglichkeit uns zu bewegen. Wenn wir jetzt noch schnellere Bewegungen realisieren möchten, werde ich im Rigidbody die Collision Detection mal kurz auf Continuous Dynamic stellen, denn sonst kommt es vor, dass wir hinterher durch den Boden fallen, und die runSpeed mache ich jetzt mal doppelt so hoch. Und jetzt sagen wir einfach mal, wenn ich die Shift-Taste drücke, sollen wir bitte rennen und wenn ich sie loslasse, also wenn ich sie nicht mehr drücke, walken, also gehen. Und dafür formatiere ich unseren Code jetzt noch ein bisschen um, denn jetzt kommt eine weitere Bedingung hinzu. if - und wir machen es jetzt von der Shift-Taste abhängig, Input.GetKey KeyCode .LeftShift, also, wenn ich gerade die linke Shift-Taste drücke, nicht wenn ich sie gerade gedrückt habe oder losgelassen habe, dann soll bitte, ich kopiere mir die ganze Zeile, und füge sie hier ein, nicht mit walkSpeed gearbeitet werden, sondern hier soll bitte runSpeed benutzt werden. Und dann benutze ich das Schlüsselwort else, also, wenn ich die Shift-Taste nicht drücke, dann soll bitte, ich mache das jetzt noch mal hier in die nächste Zeile, da haben wir es noch ein bisschen übersichtlicher, dann soll bitte mit walkSpeed gearbeitet werden. Also, was genau fragen wir hier ab? Zunächst fragen wir ab, habe ich Input auf der Achse Horizontal. Wenn ja, dann bitte zusätzlich gucken, drücke ich denn gerade die linke Shift-Taste, und wenn ja, arbeite bitte mit runSpeed. Falls nicht, aber es kommt immer noch Input auf der horizontalen Achse, arbeite bitte mit walkSpeed. Und genau das Gleiche werde ich auch jetzt hier, für unsere links-rechts Bewegung hinzufügen, beziehungsweise unsere links - beziehungsweise unsere vorne-hinten Bewegung, dann soll hier natürlich auch mit runSpeed gearbeitet werden. Und ich kopiere den ganzen Absatz hier, und sage: else, wenn ich die linke Shift-Taste nicht drücke, dann ist walkSped okay. diese eine Zeile Code, beziehungsweise diese Abfrage, ist jetzt unser Umschalter, und wir schauen in Unity, ob das funktioniert hat, wir bewegen uns mit Geschwindigkeit 1, und ich halte jetzt die linke Shift-Taste gedrückt und schon - oh, da waren wir sogar so schnell, dass wir außerhalb der Map gelandet sind, aber wir sehen schon, jetzt würde wieder Tweaking beginnen, vielleicht ist unsere runSpeed ein bisschen hoch, das müsste man jetzt natürlich anpassen, vielleicht mit sehr kleinen Werten, 1,1 / 1,2 und so weiter. Es ist natürlich eine Multiplikation, die wir hier in Visual Studio verwenden, daraus könnte man vielleicht auch kleinere Werte machen, indem man runSpeed noch relativiert, oder mit Addition arbeitet, oder mit anderen Berechnungen. Wichtig ist nur, dass wir Folgendes festhalten: Wir haben unsere walk- und runSpeed dynamisch gesetzt, per public zugänglich gemacht im Inspector, das Gleiche mit der jumpPower, diese Variable ist ein Vector 3, und mit diesen drei dynamischen Variablen haben wir bereits einen Sprung realisiert, dessen Stärke wir im Inspector einstellen können, sowohl als auch einen Umschalter zwischen ich gehe jetzt langsam und ich renne jetzt, und das Ganze in Abhängigkeit von der linken Shift-Taste. Schauen Sie sich dieses Script ganz in Ruhe noch mal an, und gehen Sie die einzelnen Punkte durch. Hier kann in kurzer Zeit eine ganze Menge Code zusammenkommen, aber eigentlich wiederholen wir uns hier nur sehr häufig, in Abhängigkeit von gewissen Dingen. Schauen Sie vielleicht einfach mal, ob Sie nette Werte für walk- und runSpeed finden, so dass man mit diesen ganz gut testen kann.

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!