diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 86900774b7a..81b9a11dd67 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -1910,11 +1910,12 @@ void EditorNode::_save_scene(String p_file, int idx) { return; } + List>> anim_backups; + _reset_animation_mixers(scene, &anim_backups); + scene->propagate_notification(NOTIFICATION_EDITOR_PRE_SAVE); editor_data.apply_changes_in_editors(); - List>> anim_backups; - _reset_animation_mixers(scene, &anim_backups); save_default_environment(); _save_editor_states(p_file, idx); diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp index 9665ad70242..bf3022fd6a2 100644 --- a/scene/3d/skeleton_3d.cpp +++ b/scene/3d/skeleton_3d.cpp @@ -325,6 +325,12 @@ void Skeleton3D::_notification(int p_what) { update_flags = UPDATE_FLAG_POSE; _notification(NOTIFICATION_UPDATE_SKELETON); } break; +#ifdef TOOLS_ENABLED + case NOTIFICATION_EDITOR_PRE_SAVE: { + force_update_all_dirty_bones(); + emit_signal(SceneStringName(skeleton_updated)); + } break; +#endif // TOOLS_ENABLED case NOTIFICATION_UPDATE_SKELETON: { // Update bone transforms to apply unprocessed poses. force_update_all_dirty_bones();