Jelajahi Sumber

Merge pull request #30588 from Demiu/patch-1

Fix 3D move_and_slide with stop_on_slope
Rémi Verschelde 5 tahun lalu
induk
melakukan
d596e169dc
1 mengubah file dengan 2 tambahan dan 2 penghapusan
  1. 2 2
      scene/3d/physics_body.cpp

+ 2 - 2
scene/3d/physics_body.cpp

@@ -1201,7 +1201,7 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve
 						if (p_stop_on_slope) {
 						if (p_stop_on_slope) {
 							if ((lv_n + p_floor_direction).length() < 0.01 && collision.travel.length() < 1) {
 							if ((lv_n + p_floor_direction).length() < 0.01 && collision.travel.length() < 1) {
 								Transform gt = get_global_transform();
 								Transform gt = get_global_transform();
-								gt.origin -= collision.travel;
+								gt.origin -= collision.travel.slide(p_floor_direction);
 								set_global_transform(gt);
 								set_global_transform(gt);
 								return Vector3();
 								return Vector3();
 							}
 							}
@@ -1265,7 +1265,7 @@ Vector3 KinematicBody::move_and_slide_with_snap(const Vector3 &p_linear_velocity
 				if (p_stop_on_slope) {
 				if (p_stop_on_slope) {
 					// move and collide may stray the object a bit because of pre un-stucking,
 					// move and collide may stray the object a bit because of pre un-stucking,
 					// so only ensure that motion happens on floor direction in this case.
 					// so only ensure that motion happens on floor direction in this case.
-					col.travel = p_floor_direction * p_floor_direction.dot(col.travel);
+					col.travel = col.travel.project(p_floor_direction);
 				}
 				}
 			} else {
 			} else {
 				apply = false; //snapped with floor direction, but did not snap to a floor, do not snap.
 				apply = false; //snapped with floor direction, but did not snap to a floor, do not snap.