Merge pull request #55254 from fabriceci/fix-horizontal-velocity-being-always-reset-on-wall

Fix horizontal velocity being always reset when the body hit a wall in 3D
This commit is contained in:
Camille Mohr-Daurat 2021-11-23 11:22:17 -07:00 committed by GitHub
commit c6022ddcf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1328,8 +1328,15 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Apply slide on forward in order to allow only lateral motion on next step.
Vector3 forward = wall_normal.slide(up_direction).normalized();
motion = motion.slide(forward);
// Avoid accelerating when you jump on the wall and smooth falling.
motion_velocity = motion_velocity.slide(forward);
// Scales the horizontal velocity according to the wall slope.
if (vel_dir_facing_up) {
Vector3 slide_motion = motion_velocity.slide(result.collisions[0].normal);
// Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
} else {
motion_velocity = motion_velocity.slide(forward);
}
// Allow only lateral motion along previous floor when already on floor.
// Fixes slowing down when moving in diagonal against an inclined wall.