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
- The component in charge of Character movement
- Separate speed, acceleration, and stopping
- Jumping means looking at height and time together
- Walking and Falling: how you are moving right now
- Hands-On: tune movement and add a Shift sprint
- Checks when it does not work
- Bonus: compare jump time in numbers
- Summary
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'sCharacterBody3D. Having walking, jumping, and slope handling built in is the same too.
| Component | Its role in movement |
|---|---|
| CapsuleComponent | The capsule collision wrapping the body, used for floors and walls |
| Mesh | The body's appearance, displaying humanoid models and animations |
| Character Movement | Receives input and handles acceleration, walking, jumping, falling |

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.

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.
| Property | What it decides | When raised |
|---|---|---|
| Max Walk Speed | The walking speed cap | Moves faster once fully accelerated |
| Max Acceleration | How strongly input increases speed | Speed rises quickly at the start |
| Braking Deceleration Walking | Deceleration strength when input stops while walking | Stops 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.

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.
| Property | Role |
|---|---|
| Jump Z Velocity | The upward speed at launch |
| Gravity Scale | The gravity multiplier applied to this character |
| Air Control | How 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.
| Comparison | Jump Z Velocity | Gravity Scale | Approximate height | Time back to the same height |
|---|---|---|---|---|
| A: baseline | 700 | 1 | About 250 cm | About 1.43 s |
| B: gravity doubled only | 700 | 2 | About 125 cm | About 0.71 s |
| C: launch speed raised too | 1000 | 2 | About 255 cm | About 1.02 s |

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.

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.
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.
| Property | Value |
|---|---|
| Max Walk Speed | 500 |
| Max Acceleration | 2048 |
| Braking Deceleration Walking | 2000 |
| Ground Friction | 8 |
| Braking Friction Factor | 2 |
| Use Separate Braking Friction | Off |
| Jump Z Velocity | 700 |
| Gravity Scale | 1 |
| Air Control | 0.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.
- Jump Z Velocity = 700 and Gravity Scale = 1. Jump once in place.
- Keep Jump Z Velocity at 700 and set Gravity Scale = 2. See whether the jump becomes low and short.
- 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

On release, return to the original speed.

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.
- Place Get Velocity with Target as self.
- Connect Return Value to Vector Length XY's A.
- Connect that Return Value to Print String's In String. Number-to-text conversion is inserted automatically.
- Connect the last Add Movement Input's white exec output to Print String.
- Set Print String's Duration to 0.

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.
Checks when it does not work
| Symptom | Where to check |
|---|---|
| Changing Max Walk Speed does not speed it up | Whether you edited the BP_InputPractice actually controlled, whether another Set overwrites it, whether there is room to run |
| Still fast after releasing Shift | Whether white wires from Completed and Canceled reach the return-to-500 Set |
| No response to Shift | IA_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 slow | Check Max Acceleration. Compare cap and acceleration separately |
| Lowering deceleration does not make it slide | Also check Ground Friction, Use Separate Braking Friction, and Braking Friction Factor |
| Raising gravity stops you reaching platforms | Jump height drops too. Tune it together with Jump Z Velocity |
| Jumps differ greatly from the table | Check Jump Max Hold Time, project and level gravity, ceilings, and the landing height |
| You get stuck on small steps and slopes | Check 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.

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.

Build the value passed to Print as follows.
- Create Subtract from Get Game Time in Seconds' Return Value.
- Connect the current time to the upper A and Get JumpStartTime to the lower B.
- Connect the subtraction result to Print String's In String. Use the text conversion and set Duration to 3.

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.