Pārlūkot izejas kodu

Fix move_and_slide wall slide acceleration (3D)

When travel is high enough, keep the global position resulting from the
move_and_collide call, and set the motion to the remainder from the
move_and_collide call. This ensures travel is taken into account once,
rather than twice.
Ricardo Buring 1 gadu atpakaļ
vecāks
revīzija
80c600d86b
1 mainītis faili ar 1 papildinājumiem un 1 dzēšanām
  1. 1 1
      scene/3d/physics/character_body_3d.cpp

+ 1 - 1
scene/3d/physics/character_body_3d.cpp

@@ -232,7 +232,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
 							} else {
 								// Travel is too high to be safely canceled, we take it into account.
 								result.travel = result.travel.slide(up_direction);
-								motion = motion.normalized() * result.travel.length();
+								motion = result.remainder;
 							}
 							set_global_transform(gt);
 							// Determines if you are on the ground, and limits the possibility of climbing on the walls because of the approximations.