From b9878b3e097d013276f20498f5e7e216b3a69495 Mon Sep 17 00:00:00 2001 From: Derick Florencio Date: Fri, 8 Aug 2025 22:09:05 +0100 Subject: [PATCH] Fix skeleton get_global_transform call before is_inside_tree --- scene/3d/bone_attachment_3d.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scene/3d/bone_attachment_3d.cpp b/scene/3d/bone_attachment_3d.cpp index c5d16b763a4..dd6a9901ee0 100644 --- a/scene/3d/bone_attachment_3d.cpp +++ b/scene/3d/bone_attachment_3d.cpp @@ -301,7 +301,12 @@ void BoneAttachment3D::on_skeleton_update() { if (sk) { if (!override_pose) { if (use_external_skeleton) { - set_global_transform(sk->get_global_transform() * sk->get_bone_global_pose(bone_idx)); + if (sk->is_inside_tree()) { + set_global_transform(sk->get_global_transform() * sk->get_bone_global_pose(bone_idx)); + // Else, do nothing, the transform will be set when the skeleton enters the tree: + // Skeleton3D::_notification(NOTIFICATION_ENTER_TREE) -> calls Skeleton3D::_notification(NOTIFICATION_UPDATE_SKELETON) + // -> emits skeleton_updated signal -> connected to BoneAttachment3D::on_skeleton_update() + } } else { set_transform(sk->get_bone_global_pose(bone_idx)); }