Description

When MovementMode is set to PHYS_Flying, the character may unexpectedly step down by MaxStepHeight when colliding with a wall near a ceiling.

This occurs because UCharacterMovementComponent::StepUp() performs a step-down movement assuming a successful upward step, even when the upward sweep is blocked by a ceiling. As a result, the character is moved downward by up to MaxStepHeight despite no actual step-up having occurred.

Note:

UCharacterMovementComponent::StepUp() internally performs the following sequence:

  1. Sweep upward by MaxStepHeight
  2. Sweep forward
  3. Sweep downward by MaxStepHeight

When the upward sweep (step 1) is blocked by a ceiling, the actual upward movement is less than MaxStepHeight (or zero). However, the step-down phase (step 3) does not take this into account and still applies the full step-down distance.

This logic is valid for walking movement but causes unintended behavior when StepUp() is executed during PHYS_Flying in some geometry conditions.

Steps to Reproduce
  1. Download the repro project from the attachment.
  2. Run the project and start PIE.
  3. Press F to switch the character into Flying mode.
  4. Press Space to move the character upward and let it touch the ceiling.
  5. Move the character toward a nearby wall.
  6. Observe that the character steps downward when colliding with the wall.

Expected Result

  • While in PHYS_Flying mode, colliding with walls or ceilings should not cause any step-up or step-down behavior.
  • The character should remain at the same vertical position when horizontal movement is blocked.

Actual Result

  • When the character hits a wall near a ceiling during PHYS_Flying, the character is moved downward by approximately MaxStepHeight. 

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-360923 in the post.

0
Login to Vote

Unresolved
ComponentUE - Gameplay - Player Movement
Affects Versions5.55.65.7
Target Fix5.8
CreatedJan 15, 2026
UpdatedJan 20, 2026
View Jira Issue