<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.janvolkland.de/index.php?action=history&amp;feed=atom&amp;title=Seitliches_Rutschen_nach_dem_Sprint_beheben</id>
	<title>Seitliches Rutschen nach dem Sprint beheben - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.janvolkland.de/index.php?action=history&amp;feed=atom&amp;title=Seitliches_Rutschen_nach_dem_Sprint_beheben"/>
	<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Seitliches_Rutschen_nach_dem_Sprint_beheben&amp;action=history"/>
	<updated>2026-10-11T23:09:48Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in UnrealWiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.janvolkland.de/index.php?title=Seitliches_Rutschen_nach_dem_Sprint_beheben&amp;diff=184&amp;oldid=prev</id>
		<title>Elaina: 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: &lt;code&gt;500 cm/s&lt;/code&gt; * Sprint…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.janvolkland.de/index.php?title=Seitliches_Rutschen_nach_dem_Sprint_beheben&amp;diff=184&amp;oldid=prev"/>
		<updated>2026-09-09T23:49:49Z</updated>

		<summary type="html">&lt;p&gt;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: &amp;lt;code&amp;gt;500 cm/s&amp;lt;/code&amp;gt; * Sprint…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
== Das Problem ==&lt;br /&gt;
&lt;br /&gt;
Im beschriebenen Blueprint wird die Laufgeschwindigkeit mit einer Timeline weich verändert:&lt;br /&gt;
&lt;br /&gt;
* normale Laufgeschwindigkeit: &amp;lt;code&amp;gt;500 cm/s&amp;lt;/code&amp;gt;&lt;br /&gt;
* Sprintgeschwindigkeit: &amp;lt;code&amp;gt;820 cm/s&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abbremszeit: &amp;lt;code&amp;gt;1 Sekunde&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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 [[Vector|Velocity]] noch einen seitlichen Anteil aus der alten Bewegungsrichtung besitzt. Dadurch entsteht ein sichtbarer Drift- oder „Eislauf“-Effekt.&lt;br /&gt;
&lt;br /&gt;
Die Timeline ist dabei nicht die eigentliche Ursache. Sie verlängert den Übergang lediglich und macht den Richtungsunterschied deutlicher sichtbar.&lt;br /&gt;
&lt;br /&gt;
== Ursache mit Debug-Pfeilen prüfen ==&lt;br /&gt;
&lt;br /&gt;
Zum Prüfen können zwei Debug-Pfeile gezeichnet werden:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rot:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;Get Velocity&amp;lt;/code&amp;gt; – die tatsächliche Bewegungsrichtung.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Grün:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;Get Actor Forward Vector&amp;lt;/code&amp;gt; – die Blick- beziehungsweise Vorwärtsrichtung des Characters.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Lösung im Blueprint ==&lt;br /&gt;
&lt;br /&gt;
Die horizontale Geschwindigkeit bleibt erhalten, ihre Richtung wird während der Abbrems-Timeline jedoch auf die Vorwärtsrichtung des Characters ausgerichtet.&lt;br /&gt;
&lt;br /&gt;
=== 1. Horizontale Geschwindigkeit ermitteln ===&lt;br /&gt;
&lt;br /&gt;
# Eine Referenz auf den &amp;#039;&amp;#039;&amp;#039;Character&amp;#039;&amp;#039;&amp;#039; verwenden. Nicht die Velocity des Player Controllers abfragen.&lt;br /&gt;
# Am Character &amp;lt;code&amp;gt;Get Velocity&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
# Das Ergebnis mit &amp;lt;code&amp;gt;Vector Length XY&amp;lt;/code&amp;gt; verbinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Vector Length XY&amp;lt;/code&amp;gt; liefert die aktuelle Geschwindigkeit auf der X/Y-Ebene als Float. Die vertikale Z-Bewegung wird dabei nicht in den Geschwindigkeitsbetrag eingerechnet.&lt;br /&gt;
&lt;br /&gt;
=== 2. Neue Bewegungsrichtung berechnen ===&lt;br /&gt;
&lt;br /&gt;
# Am Character &amp;lt;code&amp;gt;Get Actor Forward Vector&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
# Den von &amp;lt;code&amp;gt;Vector Length XY&amp;lt;/code&amp;gt; ausgegebenen Speed mit &amp;lt;code&amp;gt;Make Vector&amp;lt;/code&amp;gt; zu &amp;lt;code&amp;gt;(Speed, Speed, Speed)&amp;lt;/code&amp;gt; zusammensetzen.&lt;br /&gt;
# &amp;lt;code&amp;gt;Get Actor Forward Vector&amp;lt;/code&amp;gt; mit diesem Vector multiplizieren.&lt;br /&gt;
&lt;br /&gt;
Der beschriebene Blueprint verwendet dafür einen als &amp;lt;code&amp;gt;Vector × Vector&amp;lt;/code&amp;gt; typisierten Multiply-Node. Bei einem passend typisierten &amp;lt;code&amp;gt;Vector × Float&amp;lt;/code&amp;gt;-Node kann der Float auch direkt als Faktor verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Die Berechnung lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Neue Velocity = Actor Forward Vector × aktuelle XY-Geschwindigkeit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Speed   = 735 cm/s&lt;br /&gt;
Forward = (0.80, 0.60, 0.00)&lt;br /&gt;
Velocity ≈ (588, 441, 0) cm/s&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Geschwindigkeit bleibt dadurch gleich, aber der seitliche Anteil relativ zur Charakterausrichtung verschwindet.&lt;br /&gt;
&lt;br /&gt;
=== 3. Velocity nur am Boden setzen ===&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Get Character Movement&amp;lt;/code&amp;gt; aufrufen.&lt;br /&gt;
# Vom Character Movement Component &amp;lt;code&amp;gt;Is Moving on Ground&amp;lt;/code&amp;gt; abfragen.&lt;br /&gt;
# Zwischen &amp;lt;code&amp;gt;Update&amp;lt;/code&amp;gt; der Abbrems-Timeline und &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; einen [[Boolean#Branch|Branch]] setzen.&lt;br /&gt;
# &amp;lt;code&amp;gt;Is Moving on Ground&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;Condition&amp;lt;/code&amp;gt; des Branch verbinden.&lt;br /&gt;
# Nur den Ausgang &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; verbinden. &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; bleibt leer.&lt;br /&gt;
# Das Ergebnis der Richtungsberechnung an &amp;lt;code&amp;gt;New Velocity&amp;lt;/code&amp;gt; von &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; anschließen.&lt;br /&gt;
&lt;br /&gt;
Der vollständige Ablauf sieht vereinfacht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DATEN:&lt;br /&gt;
Get Velocity → Vector Length XY → Make Vector(Speed, Speed, Speed)&lt;br /&gt;
Get Actor Forward Vector ────────────────┐&lt;br /&gt;
                                        ├→ Multiply → Set Velocity (New Velocity)&lt;br /&gt;
Make Vector ─────────────────────────────┘&lt;br /&gt;
&lt;br /&gt;
AUSFÜHRUNG:&lt;br /&gt;
Timeline Update → Branch → True → Set Velocity&lt;br /&gt;
Is Moving on Ground ─────→ Condition&lt;br /&gt;
                           False → keine Aktion&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Warum die Bodenprüfung wichtig ist ==&lt;br /&gt;
&lt;br /&gt;
Der neu berechnete Forward Vector besitzt in diesem Fall einen Z-Wert von &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Würde &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
Die Abfrage &amp;lt;code&amp;gt;Is Moving on Ground&amp;lt;/code&amp;gt; begrenzt den Fix deshalb auf das Laufen am Boden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;: Richtungsanpassung ausführen.&lt;br /&gt;
* &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;: nichts setzen; Sprung, Fallbewegung und Schwerkraft bleiben vollständig beim Character Movement Component.&lt;br /&gt;
&lt;br /&gt;
== Einstellungen des getesteten Setups ==&lt;br /&gt;
&lt;br /&gt;
Der Fix wurde mit folgenden Ausgangswerten getestet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Einstellung&lt;br /&gt;
! Wert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Ground Friction&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8.0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Max Acceleration&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;1500&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Braking Deceleration Walking&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2000&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Braking Friction Factor&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Use Separate Braking Friction&amp;lt;/code&amp;gt;&lt;br /&gt;
| aktiviert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Braking Friction&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Orient Rotation to Movement&amp;lt;/code&amp;gt;&lt;br /&gt;
| aktiviert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Rotation Rate Z&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;360°/s&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Änderungen an &amp;lt;code&amp;gt;Braking Friction&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Braking Deceleration Walking&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Rotation Rate&amp;lt;/code&amp;gt; allein haben den Fehler im getesteten Projekt nicht beseitigt.&lt;br /&gt;
&lt;br /&gt;
== Testen ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Umbau sollten diese Fälle einzeln geprüft werden:&lt;br /&gt;
&lt;br /&gt;
# Normal laufen und enge Kurven drehen.&lt;br /&gt;
# Sprint starten und bereits während des Sprints lenken.&lt;br /&gt;
# Die Sprinttaste in einem weiten und anschließend in einem engen Bogen loslassen. Der Character darf nicht mehr seitlich rutschen.&lt;br /&gt;
# Den roten Velocity-Pfeil mit dem grünen Forward-Pfeil vergleichen. Während der Korrektur am Boden sollten beide nahezu dieselbe Richtung anzeigen.&lt;br /&gt;
# Während des Abbremsens springen oder über ein Objekt laufen. Flugbahn und Schwerkraft müssen normal bleiben.&lt;br /&gt;
&lt;br /&gt;
Im dokumentierten Projekt wurden Kurvendrift und Schweben mit diesen Tests behoben.&lt;br /&gt;
&lt;br /&gt;
== Grenzen und mögliche Nebenwirkungen ==&lt;br /&gt;
&lt;br /&gt;
* Die Korrektur ist bewusst nur für Bodenbewegung gedacht. Sie sollte nicht ungeprüft für &amp;lt;code&amp;gt;Falling&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Swimming&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;Flying&amp;lt;/code&amp;gt; übernommen werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; kann gleichzeitig aktive Effekte wie Knockback, Dash, externe Kräfte oder Root Motion überschreiben.&lt;br /&gt;
* Für Multiplayer und Dedicated Server müssen Replikation und Movement Prediction gesondert auf Client und Server getestet werden.&lt;br /&gt;
* Bei größerer Spiellogik empfiehlt es sich, die Berechnung aus dem Player Controller in eine eigene Character-Funktion auszulagern.&lt;br /&gt;
* Nach erfolgreichem Test können die Debug-Pfeile entfernt oder über eine Debug-Variable ein- und ausgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
== Kurzfassung ==&lt;br /&gt;
&lt;br /&gt;
Während die Sprint-Timeline abbremst, wird die aktuelle horizontale Geschwindigkeit auf &amp;lt;code&amp;gt;Actor Forward&amp;lt;/code&amp;gt; ausgerichtet. Ein Branch mit &amp;lt;code&amp;gt;Is Moving on Ground&amp;lt;/code&amp;gt; verhindert, dass &amp;lt;code&amp;gt;Set Velocity&amp;lt;/code&amp;gt; in der Luft die Fallgeschwindigkeit löscht. So folgt der Character Kurven sauber, während Sprünge und Schwerkraft unverändert funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* Projektinterne Bugfix-Dokumentation: „UE5.8 Bugfix – Seitliches Rutschen beim Abbremsen in Kurven“, Stand 09.09.2026.&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/API/Runtime/Engine/UCharacterMovementComponent UCharacterMovementComponent]&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/AI/Components/NavMovement/IsMovingonGround Is Moving on Ground]&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/API/Runtime/Engine/UMovementComponent UMovementComponent und Velocity]&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/movement-components-in-unreal-engine Movement Components]&lt;br /&gt;
* [https://dev.epicgames.com/documentation/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine Networked Character Movement]&lt;br /&gt;
&lt;br /&gt;
[[Category:Blueprint]]&lt;br /&gt;
[[Category:Character Movement]]&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Bugfix]]&lt;/div&gt;</summary>
		<author><name>Elaina</name></author>
	</entry>
</feed>