From b50d0ebb289ec40141c7daca2cba97047fc30493 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Thu, 28 Sep 2023 22:35:35 +0800 Subject: [PATCH] Fix "Some nodes are referenced by animation tracks" when deleting instance --- editor/scene_tree_dock.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index d7c6cb04a49..c92455d9c13 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -1546,6 +1546,14 @@ void SceneTreeDock::_fill_path_renames(Vector base_path, Vector &p_to_delete) const { + // Skip if this node will be deleted. + for (const Node *F : p_to_delete) { + if (F == p_node || F->is_ancestor_of(p_node)) { + return false; + } + } + + // This is an AnimationPlayer that survives the deletion. AnimationPlayer *ap = Object::cast_to(p_node); if (ap) { Node *root = ap->get_node(ap->get_root()); @@ -1574,11 +1582,13 @@ bool SceneTreeDock::_has_tracks_to_delete(Node *p_node, List &p_to_delet } } + // Recursively check child nodes. for (int i = 0; i < p_node->get_child_count(); i++) { if (_has_tracks_to_delete(p_node->get_child(i), p_to_delete)) { return true; } } + return false; }