Character Movement Basics in UE5: Tuning Acceleration, Jumping, and a Shift Sprint

Created: 2026-07-20Last updated: 2026-09-05

An introduction to tuning how movement feels with Character Movement. Sorts out speed versus acceleration, jump height versus air time, and air control, then adds a Shift sprint to a plain practice character.

Once you can walk with WASD and jump with space, the next step is making the character feel good to move. "I want a snappier start" and "I like the jump height, but landing takes too long" call for different settings.

Character comes with a Character Movement Component handling walking and jumping from the start. This article changes that component's settings one at a time and ties them to what you see. Finally we add a sprint that runs faster while Shift is held.

What You'll Learn

  • Tuning speed cap, acceleration, and stopping separately
  • Why jump height and air time are considered together
  • Walking versus Falling, and the difference between ground and air control
  • Adding a Shift sprint to a practice character
Tuning the character's acceleration, jump, and Shift sprint

Sponsored

The component in charge of Character movement

Pawn is the base for Actors controlled by a player or AI. Character inherits from Pawn and combines the components humanoid walking needs.

In other engines : Character corresponds to a Unity GameObject with a CharacterController , and Godot's CharacterBody3D . Having walking, jumping, and slope handling built in is the same too.

ComponentIts role in movement
CapsuleComponentThe capsule collision wrapping the body, used for floors and walls
MeshThe body's appearance, displaying humanoid models and animations
Character MovementReceives input and handles acceleration, walking, jumping, falling
The Capsule handles collision, the Mesh the appearance, and Character Movement the movement

When the capsule touches a wall, the display model stops with it. Even with a detailed humanoid model, normal walking uses the capsule to test where the body fits. Separating appearance from collision shape is covered in collision basics.

Input is passed as "the direction you want to go"

When W is pressed, you pass the intended direction and input strength to Add Movement Input . Character Movement receives that input and calculates how it actually moves.

Passing the input direction and strength to Character Movement and leaving acceleration and floor checks to it

World Direction is a direction expressed in the level's frame. Normally you pass a unit-length direction and specify strength with Scale Value. A Scale Value of 1 means input in that direction; -1 means the opposite.

What you pass is not a movement distance. You do not need to multiply Scale Value by Delta Seconds, the elapsed seconds since the previous frame. Character's movement component accounts for time.

Set Actor Location, in contrast, is a direct "put it here" instruction. It works for teleports, but writing a position every frame does not build walking acceleration and step handling. Leaving normal walking to Add Movement Input lets the settings we are about to tune do their work.

Separate speed, acceleration, and stopping

Open the character's Blueprint and select "Character Movement" in the components list. Type a property name into the Details panel's search box to find a setting.

First, distinguish these three.

PropertyWhat it decidesWhen raised
Max Walk SpeedThe walking speed capMoves faster once fully accelerated
Max AccelerationHow strongly input increases speedSpeed rises quickly at the start
Braking Deceleration WalkingDeceleration strength when input stops while walkingStops more readily

Speed is "how far per second" and acceleration is "how much speed changes per second". Distances in UE are normally cm. Max Walk Speed = 500 means a cap of 500 cm per second, or 5 m per second.

Setting the cap to 900 does not mean you instantly run at 9 m per second. With gentle acceleration, reaching that speed takes time. When "top speed is plenty but it does not feel responsive", look at Max Acceleration.

Speed cap, starting acceleration, and stopping deceleration are tuned by separate settings

Ground friction also affects turning and stopping

Ground Friction affects things like changing direction on the ground. Larger values make it easier to redirect toward the input direction. It is separate from settings that rotate the body's appearance.

With "Use Separate Braking Friction" off, stopping also uses Ground Friction, decelerating with friction multiplied by Braking Friction Factor. So lowering only Braking Deceleration Walking does not necessarily produce an ice floor.

In the first exercise we fix friction and compare cap, acceleration, and deceleration. Understanding what did what makes applying it to slippery floors easier later.

Jumping means looking at height and time together

For jumps, air time (from launch to landing) changes the feel as much as height does. Mainly these settings are involved.

PropertyRole
Jump Z VelocityThe upward speed at launch
Gravity ScaleThe gravity multiplier applied to this character
Air ControlHow much horizontal input affects motion while airborne

Under normal gravity, Z is the vertical axis. Jump Z Velocity launches you upward, gravity reduces that upward speed, and past the apex you fall.

Raising only Gravity Scale shortens the time to landing and lowers the height reached. To keep the height, raise Jump Z Velocity too.

Comparing under downward gravity close to Earth's gives these rough figures. The hands-on uses the same gravity values for this comparison.

ComparisonJump Z VelocityGravity ScaleApproximate heightTime back to the same height
A: baseline7001About 250 cmAbout 1.43 s
B: gravity doubled only7002About 125 cmAbout 0.71 s
C: launch speed raised too10002About 255 cmAbout 1.02 s
Raising only gravity gives a low, short jump; raising launch speed too restores the height

C jumps to roughly the same height as A and lands sooner. A low, short jump like B is also a candidate for games about crossing narrow platforms quickly. Which is better is decided by comparing in the situations you want to play.

The table is a calculated guide for cases with no hold-to-extend jump and no ceilings or other forces. In game, floor contact and update granularity produce differences.

Air Control is for correcting where you land

Lowering Air Control makes horizontal input while airborne less effective. Raising it makes it easier to correct your landing spot after jumping.

It is not the strength of the upward jump. And even at 0, wall contact and the like change the trajectory, so it does not mean "the same arc no matter what".

On the same jump, try pressing D or A after launching. Comparing how far you can shift horizontally without changing height shows its role.

Walking and Falling: how you are moving right now

Character Movement has a Movement Mode, the "current way of moving" . Normal walking and jumping move between two of them.

  • Walking: moving on a walkable floor.
  • Falling: off the floor, moving under gravity.

You are Falling while rising in a jump too. Despite the name, it is not only descent. A jump or stepping off a cliff makes you Falling, and landing on a walkable floor returns you to Walking.

From Walking, a jump or a step off makes you Falling; landing on a walkable floor returns you to Walking

There are also Flying for flight and Swimming for water. Flying must be switched to with Set Movement Mode, and changing mode does not by itself add up-and-down controls. Understand Walking and Falling first, then add other movement modes.

Sponsored

Hands-On: tune movement and add a Shift sprint

We use BP_InputPractice, the plain box character built in Enhanced Input Basics. Start from working WASD movement and jumping. Use that article's GameMode and PlayerStart settings and do not hand-place an extra character.

This exercise uses an additional Static Mesh named Body for appearance. The Mesh present from the start can stay empty; the Capsule and Character Movement are enough to test movement.

Use a wide flat floor for comparison. Placing a landmark box nearby makes motion easier to observe. During practice, do not use the F key mode switch; keep normal movement input enabled.

1. Standardize the starting point for comparison

Select Character Movement in BP_InputPractice and set these values. They are values for this comparison, not the template's defaults.

PropertyValue
Max Walk Speed500
Max Acceleration2048
Braking Deceleration Walking2000
Ground Friction8
Braking Friction Factor2
Use Separate Braking FrictionOff
Jump Z Velocity700
Gravity Scale1
Air Control0.2

Set "Class Defaults" Jump Max Hold Time to 0 and Jump Max Count to 1, so we compare a single jump without hold extension or double jumps.

For the gravity comparison, set "Project Settings" → "Physics" Default Gravity Z to -980 and confirm Override World Gravity is off in the level's World Settings. Use normal downward gravity and test in a practice project.

Compile, save, and Play, then press W, release, and jump to learn the baseline feel.

2. Change acceleration and stopping

Stop Play and change Max Acceleration to 4096. Leave the rest and Play again, comparing the motion right after pressing. Top speed stays 500, but how you reach it changes.

Next change Braking Deceleration Walking to 4000 and compare how you stop after releasing W. Friction is also at work, so the change may be small. Touching starting and stopping separately, before raising top speed, is the point of this exercise.

3. Compare three jumps

Stop Play, change values, and try A, then B, then C.

  1. Jump Z Velocity = 700 and Gravity Scale = 1. Jump once in place.
  2. Keep Jump Z Velocity at 700 and set Gravity Scale = 2. See whether the jump becomes low and short.
  3. Keep Gravity Scale at 2 and set Jump Z Velocity = 1000. See whether the height approaches A while landing sooner than A.

Jump on the same floor without pressing movement keys. A low ceiling would cause a mid-air collision, so ensure plenty of space above. Keep whichever combination you prefer at the end.

To test air control, compare Air Control at 0 and 0.5. Jump, then apply horizontal input, and observe how far you can correct your landing spot. Keep the other values fixed.

4. Add the Shift input

Create an Input Action IA_Sprint in the InputPractice folder with Value Type Digital (Bool). Leave Modifiers and Triggers empty.

Open IMC_PlayerControls used for normal movement, add IA_Sprint to Mappings, and bind Left Shift. That IMC is already enabled in Enhanced Input Basics, so add to the same one.

Place the IA_Sprint event in BP_InputPractice's event graph. Drag Character Movement from the components list into the graph to create a Get reference. Search from its blue output to add Set Max Walk Speed .

5. Set 900 on press and return to 500 on release

Prepare two Set Max Walk Speed nodes and connect Target on both to the Character Movement reference. Target specifies whose cap you are changing.

  • IA_Sprint's Started → the Set with Max Walk Speed = 900
  • IA_Sprint's Completed → the Set with Max Walk Speed = 500
  • IA_Sprint's Canceled → the same Set with Max Walk Speed = 500
From IA_Sprint's Started, changing Character Movement's Max Walk Speed to 900

On release, return to the original speed.

Connecting Completed and Canceled to the same Set, returning Max Walk Speed to 500

The two diagrams split the wiring of the same IA_Sprint event. You do not need two events.

Started is when input begins and Completed is when an established input ends. Wire Canceled to the same return-to-normal logic in case input is cancelled partway.

What we change here is the speed cap. We do not add logic adding distance to the character's position every frame.

Compile, save, Play, and click the screen. Press W to walk, hold W and press Left Shift to accelerate, then release only Shift to return to normal speed. Pressing Shift alone does not sprint without movement input.

6. Show the actual speed on screen

If the difference is hard to see, use Get Velocity . Velocity is speed including direction. Feeding it into Vector Length XY extracts the speed excluding vertical motion as a number.

In BP_InputPractice, add a Print String after the last Add Movement Input chained from the existing IA_PracticeMove.

  1. Place Get Velocity with Target as self.
  2. Connect Return Value to Vector Length XY's A.
  3. Connect that Return Value to Print String's In String. Number-to-text conversion is inserted automatically.
  4. Connect the last Add Movement Input's white exec output to Print String.
  5. Set Print String's Duration to 0.
Extracting horizontal speed after the movement input, converting to text, and passing it to Print String

While movement input continues, it updates the value in a brief display. Fully accelerated on open ground, it approaches about 500 normally and about 900 while sprinting. Pressing against a wall or applying weak input keeps you under the cap, which is normal.

Because this display is called from the movement input event, it does not continuously measure deceleration after releasing the key. Disconnect the added Print String's white wire once you are done checking.

Sponsored

Checks when it does not work

SymptomWhere to check
Changing Max Walk Speed does not speed it upWhether you edited the BP_InputPractice actually controlled, whether another Set overwrites it, whether there is room to run
Still fast after releasing ShiftWhether white wires from Completed and Canceled reach the return-to-500 Set
No response to ShiftIA_Sprint's type, Left Shift in IMC_PlayerControls, whether the IMC is enabled, whether input reaches the play window
The number changes but starting feels slowCheck Max Acceleration. Compare cap and acceleration separately
Lowering deceleration does not make it slideAlso check Ground Friction, Use Separate Braking Friction, and Braking Friction Factor
Raising gravity stops you reaching platformsJump height drops too. Tune it together with Jump Z Velocity
Jumps differ greatly from the tableCheck Jump Max Hold Time, project and level gravity, ceilings, and the landing height
You get stuck on small steps and slopesCheck the Capsule's collision plus Max Step Height and Walkable Floor Angle

Max Step Height is the step height you can climb and Walkable Floor Angle is the slope angle you can walk. Even a visually small step can be impassable if its collision has a different shape. Testing on simple floors and slopes, as in the Modeling Mode article, makes it easier to isolate terrain from movement settings.

Bonus: compare jump time in numbers

To verify "it feels like landing got a bit sooner" numerically, record the launch time and subtract it from the landing time. No per-frame counting is needed.

Add a Float variable JumpStartTime and a Boolean bMeasuringJump to BP_InputPractice, with defaults 0 and false.

Save the launch time

Search for On Jumped in the event graph and add the event. It fires when the Character actually launches, not merely when the button is pressed.

Wire a white line from On Jumped to Set JumpStartTime, passing Get Game Time in Seconds' Return Value as the value. Follow it with Set bMeasuringJump = true.

Saving the start time on On Jumped and remembering that a jump is being measured

Get Game Time in Seconds returns elapsed in-game time in seconds. Jump at 5.2 seconds and JumpStartTime remembers 5.2.

Show the difference from the landing time

Add an On Landed event and connect it to a Branch with Get bMeasuringJump as Condition. On the True side only, run Set bMeasuringJump = false, then Print String.

On On Landed, checking whether measuring and displaying the time difference only on True

Build the value passed to Print as follows.

  1. Create Subtract from Get Game Time in Seconds' Return Value.
  2. Connect the current time to the upper A and Get JumpStartTime to the lower B.
  3. Connect the subtraction result to Print String's In String. Use the text conversion and set Duration to 3.
Subtracting the saved start time from the current time and passing the seconds to Print String

Jump at 5.2 seconds and land at 6.3, and it shows about 1.1 seconds. Checking bMeasuringJump keeps things like dropping to the floor right after Play from counting as a jump.

Compare A, B, and C with repeated standing jumps on the same floor. Rather than small differences from the calculated values, observe the relationship: B is low and short, and C returns quickly at a height close to A. Measure without pause or time dilation.

:::note If you want to calculate jump figures

For simple motion excluding hold extension, with launch speed v and downward gravity magnitude g, height is v² / (2g) and the time back to the same height is 2v / g.

At Gravity Scale = 2, our g is 980 × 2 = 1960. At v = 1000, height is about 255 cm and time about 1.02 seconds. The table's numbers come from this calculation, not from measurements in UE.

:::

Summary

Tuning movement means touching top speed, acceleration, and stopping separately. For jumps, look at height and time to landing together, and compare air control as how much you can correct your landing spot.

Even a plain practice character feels different once acceleration, a shorter jump, and a Shift sprint are added. Try one at a time on the same floor with the same input, and find the values your game needs.

When you move on to matching running and jumping visuals to the motion, go to the Animation Blueprint article.

Reference: Character Movement, Add Movement Input, Ground Friction, On Landed, Vector Length XY, Get Game Time in Seconds.

Unreal Engine Notes in this section98