Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Spielerszene und Eingabeaktionen

In den nächsten zwei Lektionen werden wir die Spielerszene entwerfen, benutzerdefinierte Eingabe-Aktionen registrieren und die Bewegung des Spielers programmieren. Am Schluss haben Sie einen spielbaren Charakter, der sich in acht Richtungen bewegen kann.

Erstellen Sie eine neue Szene, indem Sie das Menü Szene oben links aufrufen und auf Neue Szene klicken.

image0

Erstellen Sie einen CharacterBody3D-Node als Root

../../_images/add_character_body3D.webp

Benennen Sie den CharacterBody3D in Player. Character-Bodies sind eine Ergänzung zu den Area- und Rigid-Bodies, die im 2D-Spiele-Tutorial verwendet werden. Wie Rigid-Bodies können sie sich bewegen und mit der Umgebung kollidieren, aber anstatt von der Physik-Engine gesteuert zu werden, bestimmen Sie ihre Bewegung. Sie werden sehen, wie wir die einzigartigen Merkmale des Nodes nutzen, wenn wir die Sprung- und Stampf-Mechanik programmieren.

Siehe auch

Um mehr über die verschiedenen Arten von Physik-Nodes zu erfahren, lesen Sie die Einführung in die Physik.

Zunächst werden wir ein grundlegendes Rig für das 3D-Modell unseres Charakters erstellen. Dies ermöglicht es uns, das Modell später per Code zu drehen, während es eine Animation abspielt.

Fügen Sie einen Node3D-Node als Child von Player hinzu und nennen Sie ihn Pivot

../../_images/adding_node3D.webp

Erweitern Sie dann im Dateisystem-Dock den Ordner art/ durch einen Doppelklick und ziehen Sie player.glb per Drag&Drop auf Pivot.

image1

Dies sollte das Modell als ein Child von Pivot instanziieren. Sie können es in Character umbenennen.

image2

Bemerkung

Die .glb-Dateien enthalten 3D-Szenendaten, die auf der Open-Source-Spezifikation GLTF 2.0 basieren. Sie sind eine moderne und leistungsfähige Alternative zu einem proprietären Format wie FBX, das auch von Godot unterstützt wird. Um diese Dateien zu erstellen, haben wir das Modell in Blender 3D entworfen und es in GLTF exportiert.

Wie bei allen Arten von Physik-Nodes brauchen wir eine Kollisions-Shape, damit unser Charakter mit der Umgebung kollidieren kann. Wählen Sie wieder den Node Player aus und fügen Sie einen Child-Node CollisionShape3D hinzu. Fügen Sie Im Inspektor auf der Shape Eigenschaft eine neue SphereShape3D hinzu.

../../_images/add_capsuleshape3d.webp

Das Drahtgitter der Kugel erscheint unter dem Charakter.

image3

Dies wird die Shape, die von der Physik-Engine verwendet wird, um mit der Umgebung zu kollidieren, also wollen wir, dass sie besser zum 3D-Modell passt. Verkleinern Sie sie ein wenig, indem Sie den orangen Punkt im Viewport ziehen. Meine Kugel hat einen Radius von etwa 0.8 Metern.

Verschieben Sie die Shape dann nach oben, so dass ihre Unterseite ungefähr auf der Ebene des Gitters liegt.

image4

Sie können die Sichtbarkeit des Modells ein- und ausschalten, indem Sie auf das Augen-Icon neben dem Character oder dem Pivot-Node klicken.

image5

Speichern Sie die Szene als player.tscn

Jetzt wo die Nodes bereit sind, können wir fast mit dem Programmieren anfangen. Aber zuerst sollten wir ein paar Eingabe-Aktionen definieren.

Eingabeaktionen erstellen

Um den Charakter zu bewegen, hören wir auf die Eingaben des Spielers, wie zum Beispiel das Drücken der Pfeiltasten. In Godot können wir zwar alle Tastenbelegungen in Code schreiben, es gibt allerdings ein mächtiges System das es Ihnen erlaubt, ein Label zu einer Liste von Tasten und Buttons hinzuzufügen. Dies vereinfacht unsere Skripte und macht sie lesbarer.

Dieses System ist die Eingabe-Zuordnung. Um auf den Editor zuzugreifen, gehen Sie in das Menü Projekt und wählen Sie Projekteinstellungen.

|image6|

Im oberen Bereich gibt es mehrere Tabs. Klicken sie auf Eingabe-Zuordnung. Dieses Fenster erlaubt ihnen oben neue Aktionen hinzuzufügen; das sind Ihre Labels. In dem unteren Teil können Sie Tasten an diese Aktionen binden.

|image7|

Godot Projekte liefern einige vordefinierte Aktionen für die Gestaltung von Benutzeroberflächen mit, die wir hier verwenden könnten. Aber wir definieren stattdessen unsere eigenen, um Gamepads zu unterstützen.

Wir werden unsere Aktionen move_left, move_right, move_forward, move_back und jump nennen.

Um eine Aktion hinzuzufügen, schreiben Sie ihren Namen in die obere Leiste und drücken Sie Enter.

|image8|

Erstellen Sie die folgenden fünf Aktionen:

|image9|

Um eine Taste oder einen Button an eine Aktion zu binden, klicken Sie auf den "+"-Button rechts daneben. Tun Sie dies für move_left. Drücken Sie die linke Pfeiltaste und klicken Sie OK.

../../_images/left_inputmap.webp

Binden Sie auch die Taste A, an die Aktion move_left.

|image12|

Fügen wir nun Unterstützung für den linken Joystick eines Gamepads hinzu. Klicken Sie erneut auf den "+"-Button, aber wählen Sie dieses Mal Manuelle Auswahl -> Joypad-Achsen.

../../_images/joystick_axis_input.webp

Wählen Sie die negative X-Achse des linken Joysticks.

../../_images/left_joystick_select.webp

Belassen Sie die anderen Werte als Default und drücken Sie OK

Bemerkung

Wenn Sie den Controllern unterschiedliche Eingabeaktionen zuweisen möchten, sollten Sie die Option Geräte in den Zusatzoptionen verwenden. Gerät 0 entspricht dem ersten angeschlossenen Gamepad, Gerät 1 entspricht dem zweiten angeschlossenen Gamepad usw.

Machen Sie das gleiche für die anderen Eingabeaktionen. Zum Beispiel binden Sie den rechten Pfeil, D, und die positive Achse des linken Joysticks an move_right. Nachdem Sie alle Tasten gebunden haben, sollte Ihre Benutzeroberfläche wie folgt aussehen.

|image15|

Die letzte Aktion, die Sie einrichten müssen, ist die Aktion Springen. Binden Sie die Leertaste und den A-Button des Gamepads.

|image16|

Ihre Sprung-Eingabeaktion sollte wie folgt aussehen.

|image18|

Das sind alle Aktionen die wir für dieses Spiel brauchen. Sie können dieses Menü nutzen um beliebige Gruppen von Tasten und Buttons in ihren Projekten zu beschriften.

Im nächsten Teil werden wir die Bewegung des Spielers programmieren und testen.