Godot CharacterBody3D: Bodenbewegung mit korrekter Geschwindigkeit und Physik-Timing
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Die Geschwindigkeit bleibt in Distanz pro Sekunde, Beschleunigung wird gezielt integriert, und move_and_slide läuft in den Physik-Updates mit expliziten Regeln für den Bodenzustand.
Inhalt
Eingabeabsicht und Bewegung trennen
Ein Character-Controller wandelt Eingaben in eine Wunschgeschwindigkeit um und löst die Bewegung anschliessend gegen die Spielwelt auf. Zudem entscheidet er, wann Springen, Fallen oder Anhalten erlaubt ist. Diese Entscheidungen sind von der visuellen Animation getrennt zu halten, damit eine Laufpose nicht unbemerkt zur massgeblichen Instanz für die Kollisionsbewegung wird. Am Anfang steht ein kleiner Controller, dessen Einheiten und Zustandsübergänge sich auf Papier erklären lassen.
Die Physikuhr verwenden
move_and_slide() aus _physics_process() aufrufen; die Methode wendet den Physik-Zeitschritt bereits an. Die Eigenschaft velocity drückt eine Geschwindigkeit aus, normalerweise in Metern pro Sekunde, und kann durch das Gleiten verändert werden. [1] Wird diese Geschwindigkeit vor dem Aufruf mit delta multipliziert, fliesst die Zeit doppelt ein. Die Physik-Dokumentation von Godot unterscheidet die Geschwindigkeit von einer Verschiebung, die anderen Bewegungs-APIs übergeben wird. [2]
Beschleunigung integrieren, dann die Bewegung auflösen
Bei einem üblichen Controller mit nach oben zeigender Y-Achse die horizontale Geschwindigkeit aus der Bewegungsabsicht aktualisieren und die Fallgeschwindigkeit mit der Beschleunigung multipliziert mit delta fortschreiben. Das offizielle Bewegungstutorial zeigt diese Trennung. [3] Festlegen, wie die Eingabe begrenzt wird, damit diagonale Bewegung die erlaubte Geschwindigkeit nicht unbeabsichtigt erhöht. Beim Setzen der horizontalen Komponenten die vertikale Geschwindigkeit unabhängig halten. Die Sprungberechtigung definieren und die Sprunganforderung genau einmal verbrauchen, bevor die Bewegung dieses Ticks aufgelöst wird.
Beispiel: ein Astronaut auf einem Laufsteg
Ein Astronaut soll sich mit 6 Metern pro Sekunde bewegen, bei 60 Physik-Ticks pro Sekunde. Auf einem freien, horizontalen Weg entspricht das 0,1 Metern pro Tick. Die Geschwindigkeit ist als 6 zu speichern, nicht als 0,1; den Zeitschritt wendet die Bewegungsmethode an. Der Testszene eine Rampe, eine niedrige Decke und eine Lücke hinzufügen. Prüfen, dass das Loslassen der Bewegung gemäss der gewählten Beschleunigungsregel zum Stillstand führt, ein Sprung unter der Decke keine Aufwärtsbewegung beibehält und das Verlassen des Laufstegs den Fall einleitet. Diese Zahlen veranschaulichen die Einheitenumrechnung und sind keine gemessenen Bewegungsergebnisse.
Bodenzustand und Grenzen
is_on_floor() meldet das Ergebnis des letzten move_and_slide()-Aufrufs, wobei up_direction und floor_max_angle die Einstufung als Boden beeinflussen. [1] Vor dem nächsten Bewegungsaufruf beschreibt diese Information die zuvor aufgelöste Bewegung. Spawn, Teleport und Kontaktwechsel sind entsprechend zu behandeln. Neigungsgrenzen, abfallende Rampen, Ecken und bewegliche Plattformen testen und dabei angeforderte Geschwindigkeit und tatsächliche Verschiebung getrennt untersuchen. Ein Character Body ist ein Baustein für Controller, kein vollständiges Fortbewegungsdesign. Stufensteigen, Animationsabgleich, Input-Buffering und Netzwerk-Vorhersage erfordern zusätzliche Regeln. Das API-Verhalten in diesem Artikel ist mit der im Projekt verwendeten Godot-Version abzugleichen.
Quellen
- CharacterBody3D class reference — Godot Engine contributors.
- Physics introduction — Godot Engine contributors.
- Moving the player with code — Godot Engine contributors.
Geltungsbereich und Grundlage
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Wissensstand: 2026-10-11. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- CharacterBody3D class reference — Godot Engine contributors — geprüft am 2026-10-12: erreichbar
- Physics introduction — Godot Engine contributors — geprüft am 2026-10-11: erreichbar
- Moving the player with code — Godot Engine contributors — geprüft am 2026-10-12: erreichbar
Zuschreibung und Lizenz
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Letzte Änderung: Original source-based game-development article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.