瀏覽代碼

Merge pull request #34047 from nekomatata/physical-bone-remove-joint

Properly remove joint when a physical bone is removed from the scene
Rémi Verschelde 5 年之前
父節點
當前提交
e9b709a5db
共有 1 個文件被更改,包括 7 次插入1 次删除
  1. 7 1
      scene/3d/physics_body.cpp

+ 7 - 1
scene/3d/physics_body.cpp

@@ -2161,6 +2161,9 @@ void PhysicalBone::_notification(int p_what) {
 			update_bone_id();
 			reset_to_rest_position();
 			_reset_physics_simulation_state();
+			if (!joint.is_valid() && joint_data) {
+				_reload_joint();
+			}
 			break;
 		case NOTIFICATION_EXIT_TREE:
 			if (parent_skeleton) {
@@ -2169,7 +2172,10 @@ void PhysicalBone::_notification(int p_what) {
 				}
 			}
 			parent_skeleton = NULL;
-			update_bone_id();
+			if (joint.is_valid()) {
+				PhysicsServer::get_singleton()->free(joint);
+				joint = RID();
+			}
 			break;
 		case NOTIFICATION_TRANSFORM_CHANGED:
 			if (Engine::get_singleton()->is_editor_hint()) {