diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 47642c15926..4b68a21cb98 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -721,8 +721,12 @@ bool EditorData::check_and_update_scene(int p_idx) { } new_scene->set_scene_file_path(edited_scene[p_idx].root->get_scene_file_path()); - - memdelete(edited_scene[p_idx].root); + Node *old_root = edited_scene[p_idx].root; + for (int i = 0; i < old_root->get_child_count(); i++) { + memdelete(old_root->get_child(i)); + } + old_root->replace_by(new_scene); + memdelete(old_root); edited_scene.write[p_idx].root = new_scene; if (!new_scene->get_scene_file_path().is_empty()) { edited_scene.write[p_idx].path = new_scene->get_scene_file_path(); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index a091fe151bb..edb6fee75c9 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3789,14 +3789,6 @@ void EditorNode::_set_current_scene_nocheck(int p_idx) { editor_folding.save_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx)); } - if (editor_data.check_and_update_scene(p_idx)) { - if (editor_data.get_scene_path(p_idx) != "") { - editor_folding.load_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx)); - } - - EditorUndoRedoManager::get_singleton()->clear_history(false, editor_data.get_scene_history_id(p_idx)); - } - changing_scene = true; editor_data.save_edited_scene_state(editor_selection, &editor_history, _get_main_scene_state()); @@ -3835,6 +3827,14 @@ void EditorNode::_set_current_scene_nocheck(int p_idx) { if (tabs_to_close.is_empty()) { callable_mp(this, &EditorNode::_set_main_scene_state).call_deferred(state, get_edited_scene()); // Do after everything else is done setting up. } + + if (editor_data.check_and_update_scene(p_idx)) { + if (!editor_data.get_scene_path(p_idx).is_empty()) { + editor_folding.load_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx)); + } + + EditorUndoRedoManager::get_singleton()->clear_history(false, editor_data.get_scene_history_id(p_idx)); + } } void EditorNode::setup_color_picker(ColorPicker *p_picker) {