Seitliches Rutschen nach dem Sprint beheben

Aus UnrealWiki
Version vom 9. September 2026, 23:49 Uhr von Elaina (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Beim Wechsel vom Sprint zurück zur normalen Laufgeschwindigkeit kann ein Charakter in Kurven kurz seitlich über den Boden rutschen. Diese Anleitung zeigt, wie sich die Bewegungsrichtung während des Abbremsens korrigieren lässt, ohne Sprünge oder die Schwerkraft zu beeinflussen. == Das Problem == Im beschriebenen Blueprint wird die Laufgeschwindigkeit mit einer Timeline weich verändert: * normale Laufgeschwindigkeit: <code>500 cm/s</code> * Sprint…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Beim Wechsel vom Sprint zurück zur normalen Laufgeschwindigkeit kann ein Charakter in Kurven kurz seitlich über den Boden rutschen. Diese Anleitung zeigt, wie sich die Bewegungsrichtung während des Abbremsens korrigieren lässt, ohne Sprünge oder die Schwerkraft zu beeinflussen.

Das Problem

Im beschriebenen Blueprint wird die Laufgeschwindigkeit mit einer Timeline weich verändert:

  • normale Laufgeschwindigkeit: 500 cm/s
  • Sprintgeschwindigkeit: 820 cm/s
  • Abbremszeit: 1 Sekunde

Geradeaus fällt der Fehler kaum auf. Wird die Sprinttaste jedoch während einer Kurve losgelassen, zeigt der Character bereits in die neue Richtung, während seine tatsächliche Velocity noch einen seitlichen Anteil aus der alten Bewegungsrichtung besitzt. Dadurch entsteht ein sichtbarer Drift- oder „Eislauf“-Effekt.

Die Timeline ist dabei nicht die eigentliche Ursache. Sie verlängert den Übergang lediglich und macht den Richtungsunterschied deutlicher sichtbar.

Ursache mit Debug-Pfeilen prüfen

Zum Prüfen können zwei Debug-Pfeile gezeichnet werden:

  • Rot: Get Velocity – die tatsächliche Bewegungsrichtung.
  • Grün: Get Actor Forward Vector – die Blick- beziehungsweise Vorwärtsrichtung des Characters.

Tritt der Fehler auf, zeigt der grüne Pfeil bereits in die Kurve, während der rote Pfeil noch schräg in die vorherige Richtung weist. Damit lässt sich erkennen, dass es sich nicht nur um ein Animationsproblem handelt.

Lösung im Blueprint

Die horizontale Geschwindigkeit bleibt erhalten, ihre Richtung wird während der Abbrems-Timeline jedoch auf die Vorwärtsrichtung des Characters ausgerichtet.

1. Horizontale Geschwindigkeit ermitteln

  1. Eine Referenz auf den Character verwenden. Nicht die Velocity des Player Controllers abfragen.
  2. Am Character Get Velocity aufrufen.
  3. Das Ergebnis mit Vector Length XY verbinden.

Vector Length XY liefert die aktuelle Geschwindigkeit auf der X/Y-Ebene als Float. Die vertikale Z-Bewegung wird dabei nicht in den Geschwindigkeitsbetrag eingerechnet.

2. Neue Bewegungsrichtung berechnen

  1. Am Character Get Actor Forward Vector aufrufen.
  2. Den von Vector Length XY ausgegebenen Speed mit Make Vector zu (Speed, Speed, Speed) zusammensetzen.
  3. Get Actor Forward Vector mit diesem Vector multiplizieren.

Der beschriebene Blueprint verwendet dafür einen als Vector × Vector typisierten Multiply-Node. Bei einem passend typisierten Vector × Float-Node kann der Float auch direkt als Faktor verwendet werden.

Die Berechnung lautet:

Neue Velocity = Actor Forward Vector × aktuelle XY-Geschwindigkeit

Beispiel:

Speed   = 735 cm/s
Forward = (0.80, 0.60, 0.00)
Velocity ≈ (588, 441, 0) cm/s

Die Geschwindigkeit bleibt dadurch gleich, aber der seitliche Anteil relativ zur Charakterausrichtung verschwindet.

3. Velocity nur am Boden setzen

  1. Get Character Movement aufrufen.
  2. Vom Character Movement Component Is Moving on Ground abfragen.
  3. Zwischen Update der Abbrems-Timeline und Set Velocity einen Branch setzen.
  4. Is Moving on Ground mit der Condition des Branch verbinden.
  5. Nur den Ausgang True mit Set Velocity verbinden. False bleibt leer.
  6. Das Ergebnis der Richtungsberechnung an New Velocity von Set Velocity anschließen.

Der vollständige Ablauf sieht vereinfacht so aus:

DATEN:
Get Velocity → Vector Length XY → Make Vector(Speed, Speed, Speed)
Get Actor Forward Vector ────────────────┐
                                        ├→ Multiply → Set Velocity (New Velocity)
Make Vector ─────────────────────────────┘

AUSFÜHRUNG:
Timeline Update → Branch → True → Set Velocity
Is Moving on Ground ─────→ Condition
                           False → keine Aktion

Warum die Bodenprüfung wichtig ist

Der neu berechnete Forward Vector besitzt in diesem Fall einen Z-Wert von 0. Würde Set Velocity auch in der Luft bei jedem Timeline-Update ausgeführt, würde die vertikale Geschwindigkeit ständig auf null gesetzt. Der Character könnte dann kurz schweben, weil Character Movement und Schwerkraft keine normale Fallgeschwindigkeit aufbauen können.

Die Abfrage Is Moving on Ground begrenzt den Fix deshalb auf das Laufen am Boden:

  • True: Richtungsanpassung ausführen.
  • False: nichts setzen; Sprung, Fallbewegung und Schwerkraft bleiben vollständig beim Character Movement Component.

Einstellungen des getesteten Setups

Der Fix wurde mit folgenden Ausgangswerten getestet:

Einstellung Wert
Ground Friction 8.0
Max Acceleration 1500
Braking Deceleration Walking 2000
Braking Friction Factor 1.0
Use Separate Braking Friction aktiviert
Braking Friction 0
Orient Rotation to Movement aktiviert
Rotation Rate Z 360°/s

Änderungen an Braking Friction, Braking Deceleration Walking und Rotation Rate allein haben den Fehler im getesteten Projekt nicht beseitigt.

Testen

Nach dem Umbau sollten diese Fälle einzeln geprüft werden:

  1. Normal laufen und enge Kurven drehen.
  2. Sprint starten und bereits während des Sprints lenken.
  3. Die Sprinttaste in einem weiten und anschließend in einem engen Bogen loslassen. Der Character darf nicht mehr seitlich rutschen.
  4. Den roten Velocity-Pfeil mit dem grünen Forward-Pfeil vergleichen. Während der Korrektur am Boden sollten beide nahezu dieselbe Richtung anzeigen.
  5. Während des Abbremsens springen oder über ein Objekt laufen. Flugbahn und Schwerkraft müssen normal bleiben.

Im dokumentierten Projekt wurden Kurvendrift und Schweben mit diesen Tests behoben.

Grenzen und mögliche Nebenwirkungen

  • Die Korrektur ist bewusst nur für Bodenbewegung gedacht. Sie sollte nicht ungeprüft für Falling, Swimming oder Flying übernommen werden.
  • Set Velocity kann gleichzeitig aktive Effekte wie Knockback, Dash, externe Kräfte oder Root Motion überschreiben.
  • Für Multiplayer und Dedicated Server müssen Replikation und Movement Prediction gesondert auf Client und Server getestet werden.
  • Bei größerer Spiellogik empfiehlt es sich, die Berechnung aus dem Player Controller in eine eigene Character-Funktion auszulagern.
  • Nach erfolgreichem Test können die Debug-Pfeile entfernt oder über eine Debug-Variable ein- und ausgeschaltet werden.

Kurzfassung

Während die Sprint-Timeline abbremst, wird die aktuelle horizontale Geschwindigkeit auf Actor Forward ausgerichtet. Ein Branch mit Is Moving on Ground verhindert, dass Set Velocity in der Luft die Fallgeschwindigkeit löscht. So folgt der Character Kurven sauber, während Sprünge und Schwerkraft unverändert funktionieren.

Quellen