Sven Heinrich

CREATE A GAME

MIT UNITY 3D UND C#

Dieses ebook wurde erstellt bei
Verlagslogo

Inhaltsverzeichnis

Titel

Was erwartet Dich in dieser Ausgabe?

Was bisher umgesetzt wurde

Was bei einem Sprung zu beachten ist

Sprunghöhe optimieren

Mehrmaliges Springen verhindern

Raycast sichtbar machen

Fallgeschwindigkeit optimieren

Sprungweite optimieren

Animationen auswählen und bereitstellen

Animator anlegen

Neuen „Blend Tree“ erstellen

Idle-Animation anlegen

Running-Animation anlegen

Animator Controller und Running-Parameter im Script hinzufügen

Jump-Animation anlegen

Jump-Parameter im Script

Vorschau: Nächste Ausgabe (u.a. Animationen)

Über den Autor

Weitere veröffentlichte eBooks

Impressum neobooks

Was erwartet Dich in dieser Ausgabe?

CREATE A GAME

RPG - MIT UNITY 3D UND C#

Ausgabe 2

In dieser Ausgabe von „CREATE A GAME“ setze ich die Entwicklung meines eigenen RPGs fort. Dabei werde ich unter anderem folgende Ziele am Ende verwirklicht haben:

- Optimierung der Sprunghöhe

- Mehrmaliges Springen verhindern

- Sprungweite optimieren

- Animation beim Stehen, Vorwärtslaufen und Springen aus dem Stand

Sei gespannt und komm mit mir auf eine spannende Reise bei der Entwicklung eines eigenen RPGs

Was bisher umgesetzt wurde

In der letzten Ausgabe habe ich mein erstes RPG-Projekt gestartet. Hierfür verwende ich Unity 3D und die Programmiersprache „C#“.

Ich habe mir zuerst einen vorgefertigten Charakter gesucht und habe mich dabei entschlossen, vorerst mit einer Heldin anzufangen. Nachdem ich fündig geworden bin, wurde sie in Unity 3D eingebunden und kleinere Fehler im Design behoben.

Nun kam Bewegung ins Spiel. Mit ein paar einfachen Zeilen per C#-Code konnte die Heldin sich auf Tastendruck nach vorne, hinten und zu den Seiten bewegen. Die Umsetzung erfolgte durch das Ansprechen der Transform-Komponente der Heldin.

Für die Durchführung eines Sprungs habe ich indes auf die physischen Kräfte zurückgegriffen, auch hier folgten ein paar Zeilen im Code. Grundsätzlich kann die Figur nun auf Tastendruck springen, allerdings sind noch einzelne Feinheiten vorzunehmen, damit das Ganze „besser“ aussieht.

Für die Umsetzung des RPGs werde ich

Unity 3D: 2019.4.15f1
Microsoft Visual Studio Community 2019: (aktuelle Version)

verwenden.

Fehlt Dir eine Ausgabe? Hier findest Du sie:

CREATE A GAME – Ausgabe 1 (ISBN: 978-3-7529-3052-8)

Was bei einem Sprung zu beachten ist

Je nachdem welche Art von einem Spiel programmiert wird, können die Ausführungen eines Sprungs sehr unterschiedlich dargestellt werden. Es kann beispielsweise die Sprunghöhe- und kraft variieren oder auch ein Mehrfachsprung initialisiert werden.

In meinem RPG habe ich vor, dass die Heldin bis ungefähr zur Hälfte ihrer Körperhöhe hochspringen kann. Der anschließende Fall sollte dann etwas schneller gehen als die bisher voreingestellte Schwerkraft. Außerdem soll sie nur einmal springen könne. Das heißt, wenn sie in der Luft ist und die Sprung-Taste nochmal gedrückt wird, soll kein weiterer Sprung möglich sein.

Des Weiteren ist mir aufgefallen, dass die Heldin auch eine Meisterin im Weitspringen ist. Wenn sie springt und sich in eine beliebige Richtung im Sprung bewegt, dann kommt sie ganz schön weit. Zu weit für meinen Geschmack. Schließlich soll sie nicht ganze Flüsse überspringen können.

Folgende Schritte sind also für den Sprung zu berücksichtigen:

- Sprunghöhe optimieren

- Mehrmaliges Springen deaktivieren

- Fallgeschwindigkeit optimieren

- Sprungweite optimieren

Außerdem werde ich noch eine optionale Einstellung vornehmen. Damit es etwas deutlicher wird, wo die Abtastung der Figur mit dem Untergrund stattfindet, werde ich darüber hinaus noch ein Gizmo programmieren. Dieses Gizmo ist eine Hilfslinie in Unity 3D, die allerdings in der Spielszene nicht zu sehen ist.

Sprunghöhe optimieren

Willkommen zurück im Projekt „RPG Prototyp“.

Schauen wir uns mein erstes „Problem“ einmal genauer an. Die Sprunghöhe ist noch nicht optimal eingestellt. Hierzu wechsle ich die Ansicht auf die Figur im Scene-Fenster auf die rechte Seite. Am einfachsten kannst Du die Ansicht über die Steuerung in der rechten oberen Bildschirmecke vornehmen, indem Du auf die X-Achse klickst. Achte darauf, dass Du vorher frontal auf die Figur schaust.

Grafik 57

Anschließend wechsle ich von der perspektivischen in die orthographische Ansicht. Die perspektivische Ansicht erkennst Du an dem Pfeil unterhalb der Achseneinstellungen. Das bedeutet, dass sich die Elemente beispielsweise nach hinten hin „verschlanken“. Das kannst Du ganz gut auf dem am Boden befindlichen Gitternetz erkennen.

Durch einen Klick auf das „<- Right“ wechselt die Ansicht in die orthographische. Diese erkennst Du nun an den drei parallelen Linien.

Grafik 60

Nun sehe ich meine Figur von der rechten Seite frontal und es ist ein weiteres Gitternetz erschienen. Hieran kann ich nun erkennen, wie hoch meine Figur tatsächlich springt.

Grafik 61

Ich starte das Spiel und springe. Allerdings bewege ich nicht die Figur in eine Richtung, aufgrund des bereits erwähnten Weitsprung-Problems. Sie springt also aus dem Stand zurück in den Stand.

Grafik 62

Ok, die Figur springt ungefähr bis zur Horizontgrenze (roter Pfeil). Wieder auf dem Boden zurück, schaue ich mir an, wie hoch die Figur tatsächlich springen sollte. Ich habe es zur besseren Darstellung mit einem grünen Pfeil gekennzeichnet. Hier liegt ungefähr die Mitte der Figur.

Grafik 63

Da ich in der letzten Ausgabe beim Anlegen der Variablen „jumpForce“ in der C#-Datei „PlayerController“ einen Parameter namens [SerializeField] mitgegeben habe, kann ich nun bequem in Unity 3D die Einstellung der Sprungkraft vornehmen. Hierzu wähle ich in der Hierarchy die Figur aus und finde im Inspector unter der Script-Komponente das entsprechende Feld.

Grafik 545

Nun ist ein wenig ausprobieren angesagt. Am besten geht es, wenn ich das Spiel starte und im laufenden Betrieb den Wert der Variable verändere. Allerdings ist es wichtig, wenn ich die richtige Einstellung gefunden habe, dass ich mir die merke. Stoppe ich das Spiel, steht dort wieder der zu Beginn eingegebene Wert (hier der Wert 5). Änderungen werden also nur gespeichert, wenn diese außerhalb des Spielbetriebs vorgenommen werden!

Nach ein paar Probeläufen bin ich auf den Wert 4 gekommen. Hieran erkennst Du, dass es bereits einen großen Unterschied macht, obwohl es sich nur um einen Zahlenwert (von 5 auf 4) handelt.

Grafik 547

Ich bin mit der Sprunghöhe zufrieden und widme mich dem nächsten Anliegen, das Verhindern des mehrmaligen Sprungs.

Mehrmaliges Springen verhindern

Nachdem ich die Sprunghöhe optimiert habe, möchte ich verhindern, dass die Heldin mehrmals hintereinander springen kann. Im Moment ist es nämlich so, dass sie auf Tastendruck in der Luft nochmals springt und so letztendlich unendlich weit in die Höhe steigen kann.

Der Sprung soll aber nur einmal ausgeführt werden und dann erst wieder, wenn sie auf dem Boden steht. Aus diesem Grund benötige ich eine Abfrage, ob sie tatsächlich auf dem Boden steht, um dann erst den Sprung ausführen zu können.

Ich öffne das C#-Script „PlayerController“ und lege als erstes eine neue Variable des Datentyps bool an. Diese nenne ich „onGround“.

Grafik 12

In einer Bool-Variablen können zwei Werte gespeichert werden. True und False. Steht die Heldin auf dem Boden, soll der Wert „true“ sein. Andernfalls „false“.

Das Überprüfen, ob die Heldin auf dem Boden, bzw. auf irgendeinem anderen Gegenstand (wie beispielsweise einem Stein) steht, werde ich durch eine Raycast-Abfrage durchführen. Dabei muss man sich das ähnlich einem Laserstrahl vorstellen, der ständig von der Heldin nach unten geschossen wird. Berührt der Laserstrahl einen Gegenstand, dann wird der Erfolg mit einem „true“ gemeldet. Aber Achtung, der Laserstrahl reagiert nur mit „Collider“. Der Gegenstand muss also einen Collider haben.

Folgenden Code schreibe ich in der Update-Methode:

Grafik 14

Was passiert hier:

a) Der Variablen „onGround“ wird ein Wert zugewiesen

b) Als Wert wird zuerst die Unity-eigene Klasse „Physics“ aufgerufen und per Punktoperator auf „Raycast“ zugegriffen. Der Raycast benötigt innerhalb der ()-Klammern verschiedene Parameter.

c) Vector3 des abzufragenden Objektes: Hierzu nehme ich die aktuelle Position der Heldin. Diese kann ich mit transform.position aufrufen. Außerdem lasse ich den Laserstrahl nicht direkt am unteren Ende