Browse Source

Merge pull request #88947 from lawnjelly/fix_physics_platform_rid

Fix physics platform crash
Rémi Verschelde 1 year ago
parent
commit
79005978b7
1 changed files with 9 additions and 2 deletions
  1. 9 2
      scene/3d/physics/character_body_3d.cpp

+ 9 - 2
scene/3d/physics/character_body_3d.cpp

@@ -56,8 +56,15 @@ bool CharacterBody3D::move_and_slide() {
 			excluded = (platform_wall_layers & platform_layer) == 0;
 			excluded = (platform_wall_layers & platform_layer) == 0;
 		}
 		}
 		if (!excluded) {
 		if (!excluded) {
-			//this approach makes sure there is less delay between the actual body velocity and the one we saved
-			PhysicsDirectBodyState3D *bs = PhysicsServer3D::get_singleton()->body_get_direct_state(platform_rid);
+			PhysicsDirectBodyState3D *bs = nullptr;
+
+			// We need to check the platform_rid object still exists before accessing.
+			// A valid RID is no guarantee that the object has not been deleted.
+			if (ObjectDB::get_instance(platform_object_id)) {
+				//this approach makes sure there is less delay between the actual body velocity and the one we saved
+				bs = PhysicsServer3D::get_singleton()->body_get_direct_state(platform_rid);
+			}
+
 			if (bs) {
 			if (bs) {
 				Vector3 local_position = gt.origin - bs->get_transform().origin;
 				Vector3 local_position = gt.origin - bs->get_transform().origin;
 				current_platform_velocity = bs->get_velocity_at_local_position(local_position);
 				current_platform_velocity = bs->get_velocity_at_local_position(local_position);