Spielerszene und Eingabeaktionen

In den nächsten zwei Lektionen werden wir die Spielerszene entwerfen, benutzerdefinierte Input 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 Szenen Menü oben links aufrufen und auf Neue Szene klicken. Erstellen Sie ein KinematicBody Node als Wurzel und nennen Sie es Player.

image0

Kinematische Körper sind eine Ergänzung zu den Bereichen und Starren Körperb die in der 2D Spiel Anleitung verwendet werden. So wie auch Starre Körper, können sie sich bewegen und mit ihrer Umgebung kollidieren, aber anstatt von der Physik-Engine kontrolliert zu werden, bestimmen Sie ihre Bewegung. Sie werden sehen wie wir diese besonderen Eigenschaften des Nodes einsetzen, wenn wir die Sprung- und Stampf-Mechanik programmieren.

Siehe auch

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

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 ein Spatial Node als Unternode von Player hinzu and nennen Sie es Pivot. Erweitern Sie dann im Dateisystem-Panel den art/ Ordner durch einen Doppelklick und ziehen sie player.glb auf das Pivot Node.

image1

Dadurch sollte das Modell als Unternode von Pivot instanziiert werden. Sie können es nun zu Character umbenennen.

image2

Bemerkung

Die .glb Dateien beinhalten 3D-Szenendaten, die auf der Open-Source Spezifikation GLTF 2.0 basieren. Sie sind eine moderne und leistungsfähige alternative zu proprietären Formaten so wie FBX, welche Godot allerdings auch unterstützt. Um diese Dateien zu erstellen, haben wir das Modell in Blender 3d entworfen und nach GLTF exportiert.

Wie bei allen Arten von Physik Nodes, brauchen wir eine Kollisionsform mit der unser Charakter mit seiner Umgebung kollidiert. Wählen Sie das Player Node wieder aus und fügen sie eine CollisionShape hinzu. Weisen sie in dem Inspektor der Eigenschaft Shape eine SphereShape zu. Das Drahtgitter der Kugel wird unterhabl der Figur angezeigt.

image3

Dies wird die Form 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 Punk im Ansichtsfenster ziehen. Meine Kugel hat einen Radius von etwa 0.8 Metern.

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

image4

Sie können die Sichtbarkeit des Modells umschalten indem sie auf das Augen-Symbol neben den Character oder Pivot Nodes klicken.

image5

Speichern Sie die Szene unter Player.tscn.

Jetzt wo die Nodes bereit sind, können wir fast mit dem Programmieren anfangen. Aber zuerst sollten wir ein paar Input 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 eine Beschriftung zu einer Liste von Tasten und Knöpfen hinzuzufügen. Dies vereinfacht unsere Skripte und macht sie lesbarer.

Dieses System ist die Eingabe-Zuordnung. Im auf ihren Editor zuzugreifen, gehen sie zum Projekt Menü und wählen sie Projekteinstellungen....

|image6|

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

|image7|

Godot Projekte kommen mit einigen vordefinierten Aktionen für die Gestaltung von Benutzeroberflächen, 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 fünf oben genannten Aktionen. Ihr Fenster sollte sie alle unten aufgeführt haben.

|image9|

Um eine Taste oder einen Knopf an eine Aktionen zu binden, klicken Sie auf den "+" Knopf rechts daneben. Tun Sie dies für move_left und klicken Sie in dem Dropdown-Menü auf Taste.

|image10|

Diese Option erlaubt es Ihnen eine Tastatureingabe hinzuzufügen. Ein Popup erscheint und wartet darauf, dass Sie eine Taste drücken. Drücken sie die linke Pfeiltaste und klicken Sie auf OK.

|image11|

Machen Sie dasselbe für die A-Taste.

|image12|

Fügen wir nun Unterstützung for den linken Joystick eines Gamepads hinzu. Klicken Sie nochmal auf den "+" Knopf, aber wählen Sie dieses Mal Joystickachse.

|image13|

Das Popup bietet Ihnen zwei Dropdown-Menüs. Auf der linken Seite können Sie ein Gamepad nach Index auswählen. Gerät 0 entspricht dem ersten angeschlossenem Gamepad, Gerät 1 dem zweiten und so weiter. Auf der rechten Seite können Sie den Joystick und die Richtung auswählen, die Sie an die Aktion binden wollen. Lassen sie die Standartparameter wie sie sind und drücken Sie den Hinzufügen Knopf.

|image14|

Tuen Sie nun das selbe für due anderen Aktionen. Binden Sie zum Beispiel die rechte Pfeiltaste, D und die rechte Achse des linken Joysticks an move_right. Nachdem sie alle Tasten gebunden haben, sollte Ihr Interface wie folgt aussehen.

|image15|

Nun müssen wir noch die jump Aktion einrichten. Binden sie danach die Leertaste und die A-Taste des Gamepads an die Aktion. Um eine Taste des Gamepad zu binden, wählen sie die Option Joysticktaste im Menü.

|image16|

Lassen Sie die Standardparameter wie sie sind und klicken Sie den Hinzufügen Knopf.

|image17|

Deine 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 Knöpfen in ihren Projekten zu Beschriften.

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