瀏覽代碼

Merge pull request #86310 from jirisvd/fix-softbody-reload

Fix `SoftBody3D` pinned points breaking when reloading scene
Rémi Verschelde 1 年之前
父節點
當前提交
0c956e49ac
共有 1 個文件被更改,包括 7 次插入1 次删除
  1. 7 1
      scene/3d/soft_body_3d.cpp

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

@@ -218,7 +218,13 @@ bool SoftBody3D::_set_property_pinned_points_attachment(int p_item, const String
 
 
 	if ("spatial_attachment_path" == p_what) {
 	if ("spatial_attachment_path" == p_what) {
 		PinnedPoint *w = pinned_points.ptrw();
 		PinnedPoint *w = pinned_points.ptrw();
-		callable_mp(this, &SoftBody3D::_pin_point_deferred).call_deferred(Variant(w[p_item].point_index), true, p_value);
+
+		if (is_inside_tree()) {
+			callable_mp(this, &SoftBody3D::_pin_point_deferred).call_deferred(Variant(w[p_item].point_index), true, p_value);
+		} else {
+			pin_point(w[p_item].point_index, true, p_value);
+			_make_cache_dirty();
+		}
 	} else if ("offset" == p_what) {
 	} else if ("offset" == p_what) {
 		PinnedPoint *w = pinned_points.ptrw();
 		PinnedPoint *w = pinned_points.ptrw();
 		w[p_item].offset = p_value;
 		w[p_item].offset = p_value;