Seitliches Rutschen nach dem Sprint beheben
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
- Eine Referenz auf den Character verwenden. Nicht die Velocity des Player Controllers abfragen.
- Am Character
Get Velocityaufrufen. - Das Ergebnis mit
Vector Length XYverbinden.
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
- Am Character
Get Actor Forward Vectoraufrufen. - Den von
Vector Length XYausgegebenen Speed mitMake Vectorzu(Speed, Speed, Speed)zusammensetzen. Get Actor Forward Vectormit 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
Get Character Movementaufrufen.- Vom Character Movement Component
Is Moving on Groundabfragen. - Zwischen
Updateder Abbrems-Timeline undSet Velocityeinen Branch setzen. Is Moving on Groundmit derConditiondes Branch verbinden.- Nur den Ausgang
TruemitSet Velocityverbinden.Falsebleibt leer. - Das Ergebnis der Richtungsberechnung an
New VelocityvonSet Velocityanschließ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:
- Normal laufen und enge Kurven drehen.
- Sprint starten und bereits während des Sprints lenken.
- Die Sprinttaste in einem weiten und anschließend in einem engen Bogen loslassen. Der Character darf nicht mehr seitlich rutschen.
- Den roten Velocity-Pfeil mit dem grünen Forward-Pfeil vergleichen. Während der Korrektur am Boden sollten beide nahezu dieselbe Richtung anzeigen.
- 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,SwimmingoderFlyingübernommen werden. Set Velocitykann 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
- Projektinterne Bugfix-Dokumentation: „UE5.8 Bugfix – Seitliches Rutschen beim Abbremsen in Kurven“, Stand 09.09.2026.
- UCharacterMovementComponent
- Is Moving on Ground
- UMovementComponent und Velocity
- Movement Components
- Networked Character Movement
