浏览代码

Merge pull request #109444 from thederickff/ba-transform-before-esk

Fix `BoneAttachment3D` getting global transform of external skeleton before it `is_inside_tree()`
Thaddeus Crews 1 月之前
父节点
当前提交
7791eed739
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      scene/3d/bone_attachment_3d.cpp

+ 6 - 1
scene/3d/bone_attachment_3d.cpp

@@ -301,7 +301,12 @@ void BoneAttachment3D::on_skeleton_update() {
 		if (sk) {
 		if (sk) {
 			if (!override_pose) {
 			if (!override_pose) {
 				if (use_external_skeleton) {
 				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 {
 				} else {
 					set_transform(sk->get_bone_global_pose(bone_idx));
 					set_transform(sk->get_bone_global_pose(bone_idx));
 				}
 				}