How to Make a Sprint System in UE5 Blueprints

Sprint looks like one node — it nearly is — but the version players actually feel good about couples it to stamina and handles the edge cases: releasing mid-air, running out of breath mid-sprint, and regen delay.

What it’s made of

Variables

WalkSpeed and SprintSpeed floats (Character Movement’s defaults are your baseline), Stamina/MaxStamina floats, and a bIsSprinting bool.

Events

An Enhanced Input action (IA_Sprint) with Started and Completed triggers — Started sets sprinting, Completed clears it. Stamina drain/regen runs on a looping timer rather than Tick.

The logic

On sprint start: Branch on stamina > threshold, then set Character Movement → Max Walk Speed to SprintSpeed. On stop (or stamina hitting zero): set it back to WalkSpeed. The stamina timer subtracts while sprinting and moving, regenerates while not — gate regen behind a short delay for a more deliberate feel.

Key nodes you’ll wire

Enhanced Input Action (IA_Sprint)Get Character MovementSet Max Walk SpeedBranchSet Timer by EventGet Velocity / Vector Length

The mistake that breaks it

Draining stamina whenever the key is held, even standing still — check velocity too, or players burn stamina leaning on the keyboard.

New to how Blueprint systems fit together? Read the anatomy of a Blueprint system first.

Or skip the wiring — generate it

BlueprintStudio builds this system from a plain-language prompt — the right nodes, exec and data pins wired, defaults set — and tells you whether it is ready to paste or what to set up first. The prompt is prefilled:

Build “Sprint System” in BlueprintStudio

Prompt variations to try

Paste it into your Blueprint, or apply it with the free Cosindra desktop app (Windows & macOS).

Common questions

What’s the difference between Started, Triggered, and Completed on an Enhanced Input action?

Started fires once on the initial press, Triggered fires every frame while the input holds, and Completed fires once on release. Hold-to-sprint only needs the outer pair: Started sets bIsSprinting and raises Max Walk Speed, Completed undoes both. Wiring the speed change to Triggered sets the same value dozens of times per second for nothing.

How do I make sprint a toggle instead of hold?

Use only the Started trigger and Branch on bIsSprinting: false starts the sprint, true stops it. Avoid FlipFlop here — when stamina hitting zero force-cancels the sprint, a FlipFlop’s internal state falls out of sync and the next press does the opposite of what the player expects. The explicit bool stays truthful no matter which path ended the sprint.

What’s the best way to drain stamina over time in Blueprints?

A looping Set Timer by Event at something like 0.1 seconds — cheaper than Tick and easy to pause. Multiply the drain by the timer interval so changing the loop rate doesn’t change the cost per second. Inside the loop, Branch on bIsSprinting AND Vector Length of Get Velocity above a threshold, so holding shift while standing still costs nothing.

More systems