Description

In UCharacterMovementComponent::TwoWallAdjust, characters can gain unintended upward velocity (slope boosting) when hitting corners with an acute angle (<=90 degrees) while in the Falling movement mode. This occurs because the safety check HandleSlopeBoosting is bypassed in the acute-angle code path.

Root Cause

When a character hits two walls in one frame, the logic in UMovementComponent::TwoWallAdjust branches based on the dot product of the two wall normals:

  • Obtuse Angles (Dot Product > 0): Calls ComputeSlideVector. The UCharacterMovementComponent override then applies HandleSlopeBoosting, which correctly prevents upward launches.
  • Acute Angles (Dot Product <= 0): The function uses a cross-product projection and skips ComputeSlideVector entirely. Consequently, HandleSlopeBoosting is never called, leaving the vertical velocity unchecked.

UCharacterMovementComponent overrides TwoWallAdjust but does not have additional logic for IsFalling() state.

Steps to Reproduce
  1. Create a level with two walls meeting at a sharp angle (≤90°), at least one wall having a ramp/slope.
  2. Make a Character fall into the corner while horizontal velocity is applied each frame (e.g. via SetVelocity).
  3. Observe the character being pushed upward without bound.
  4. With an obtuse-angle corner, no upward pushing occurs.

Check out the attached repro project and video

Have Comments or More Details?

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

0
Login to Vote

Fixed
ComponentUE - Gameplay - Player Movement
Affects Versions5.55.65.7
Target Fix5.8
Fix Commit52961389
CreatedApr 14, 2026
ResolvedApr 21, 2026
UpdatedJun 8, 2026
View Jira Issue