Danke - Bitte kommentiere den Code und teile die Schlüsselfunktionen auf, damit ich verstehen kann, was du gemacht hast und wie.
Wie kann man ein First-Person-Controller-Skript in GDscript schreiben und es auf einen KinematicBody-Knoten anwenden, wenn man Godot Engine 3.x verwendet? Was ist das Äquivalent zum KinematicBody-Knoten in Godot Engine 4.x und wie muss das First-Person-Controller-Skript geändert werden, um in Godot Engine 4.x zu funktionieren? Hier ist ein Beispiel für ein First-Person-Controller-Skript in GDscript für Godot Engine 3.x, angewendet auf einen KinematicBody-Knoten:
extends KinematicBody

var speed = 5
var gravity = 9.8
var jump_speed = 8

func _physics_process(delta):
    var velocity = Vector3()

    if is_on_floor():
        velocity.y = -gravity
    if Input.is_action_pressed("ui_up"):
        velocity.z -= speed
    if Input.is_action_pressed("ui_down"):
        velocity.z += speed
    if Input.is_action_pressed("ui_left"):
        velocity.x -= speed
    if Input.is_action_pressed("ui_right"):
        velocity.x += speed
    if Input.is_action_just_pressed("jump") and is_on_floor():
        velocity.y = jump_speed

    move_and_slide(velocity)

In Godot Engine 4.x ist der äquivalente Knoten zum KinematicBody der RigidBody. Das äquivalente First-Person-Controller-Skript würde so aussehen:

extends RigidBody

var speed = 5
var gravity = 9.8
var jump_speed = 8

func _physics_process(delta):
    var velocity = Vector3()

    if is_on_floor():
        velocity.y = -gravity
    if Input.is_action_pressed("ui_up"):
        velocity.z -= speed
    if Input.is_action_pressed("ui_down"):
        velocity.z += speed
    if Input.is_action_pressed("ui_left"):
        velocity.x -= speed
    if Input.is_action_pressed("ui_right"):
        velocity.x += speed
    if Input.is_action_just_pressed("jump") and is_on_floor():
        velocity.y = jump_speed

    move_and_slide(velocity)

Beachte, dass in diesem Beispiel die Verwendung von move_and_slide() durch apply_impulse() ersetzt wird, um die Geschwindigkeitsänderungen auf den Rigid Body anzuwenden.
Hier ist das kommentierte First-Person-Controller-Skript in GDscript für Godot Engine 3.x, angewendet auf einen KinematicBody-Knoten:

```
# Erweitere das Skript vom KinematicBody-Knoten
extends KinematicBody

# Definiere die Variablen für die Bewegungsgeschwindigkeit, die Schwerkraft und die Sprunggeschwindigkeit
var speed = 5
var gravity = 9.8
var jump_speed = 8

# Funktion zur Behandlung des Physik-Updates
func _physics_process(delta):
    # Erstelle eine Vector3-Variable zur Speicherung der Geschwindigkeit
    var velocity = Vector3()

    # Wenn der Spieler auf dem Boden steht, wende die Schwerkraft an
    if is_on_floor():
        velocity.y = -gravity

    # Überprüfe, ob der Spieler die Pfeiltaste nach oben drückt
    if Input.is_action_pressed("ui_up"):
        # Verringere die Geschwindigkeit in der Z-Achse um die Variable speed
        velocity.z -= speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach unten drückt
    if Input.is_action_pressed("ui_down"):
        # Erhöhe die Geschwindigkeit in der Z-Achse um die Variable speed
        velocity.z += speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach links drückt
    if Input.is_action_pressed("ui_left"):
        # Verringere die Geschwindigkeit in der X-Achse um die Variable speed
        velocity.x -= speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach rechts drückt
    if Input.is_action_pressed("ui_right"):
        # Erhöhe die Geschwindigkeit in der X-Achse um die Variable speed
        velocity.x += speed

    # Überprüfe, ob der Spieler die Sprungtaste drückt und sich auf dem Boden befindet
    if Input.is_action_just_pressed("jump") and is_on_floor():
        # Erhöhe die Geschwindigkeit in der Y-Achse um die Variable jump_speed
        velocity.y = jump_speed

    # Verwende die move_and_slide-Funktion, um die Geschwindigkeitsänderungen anzuwenden und Kollisionen zu behandeln
    move_and_slide(velocity)


```


Und hier ist das kommentierte äquivalente First-Person-Controller-Skript in GDscript für Godot Engine 4.x, angewendet auf einen RigidBody-Knoten:


```
# Erweitere das Skript vom RigidBody-Knoten
extends RigidBody

# Definiere die Variablen für die Bewegungsgeschwindigkeit, die Schwerkraft und die Sprunggeschwindigkeit
var speed = 5
var gravity = 9.8
var jump_speed = 8

# Funktion zur Behandlung des Physik-Updates
func _physics_process(delta):
    # Erstelle eine Vector3-Variable zur Speicherung der Geschwindigkeit
    var velocity = Vector3()

    # Wenn der Spieler auf dem Boden steht, wende die Schwerkraft an
    if is_on_floor():
        velocity.y = -gravity

    # Überprüfe, ob der Spieler die Pfeiltaste nach oben drückt
    if Input.is_action_pressed("ui_up"):
        # Verringere die Geschwindigkeit in der Z-Achse um die Variable speed
        velocity.z -= speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach unten drückt
    if Input.is_action_pressed("ui_down"):
        # Erhöhe die Geschwindigkeit in der Z-Achse um die Variable speed
        velocity.z += speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach links drückt
    if Input.is_action_pressed("ui_left"):
        # Verringere die Geschwindigkeit in der X-Achse um die Variable speed
        velocity.x -= speed

    # Überprüfe, ob der Spieler die Pfeiltaste nach rechts drückt
    if Input.is_action_pressed("ui_right"):
        # Erhöhe die Geschwindigkeit in der X-Achse um die Variable speed
        velocity.x += speed

    # Überprüfe, ob der Spieler die Sprungtaste drückt und sich auf dem Boden befindet
    if Input.is_action_just_pressed("jump") and is_on_floor():
        # Erhöhe die Geschwindigkeit in der Y-Achse um die Variable jump_speed
        velocity.y = jump_speed

    # Verwende die move_and_slide-Funktion, um die Geschwindigkeitsänderungen anzuwenden und Kollisionen zu behandeln
    move_and_slide(velocity)

```