For two map placed actors, if one actor B's non root component is attached to another actor A, the attachment is not retained when actor A reruns its construction script, such as when moving actor A in the editor.
AActor::RerunConstructionScripts() attempts to cache and restore attached components. However, the logic assumes that any attached actors are attached via their root component, which is not necessarily true. While the following code there does find attached actors who are attached via their non-root component:
// If there are attached objects detach them and store the socket names TArray<AActor*> AttachedActors; GetAttachedActors(AttachedActors);
the function then proceeds to assume that the attached actor's root component is how that actor is attached to this one:
USceneComponent* EachRoot = AttachedActor->GetRootComponent(); // If the component we are attached to is about to go away... if (EachRoot && EachRoot->GetAttachParent() && EachRoot->GetAttachParent()->IsCreatedByConstructionScript())
The attached actor's non-root component is not processed, so their attachment to this actor won't be reattached.
I suggest considering either to:
See attached repro UE 5.3 project.
Repro steps:
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-204110 in the post.