It seems like the issue is that the code in FComponentReferenceCustomization::SetValue and FComponentReferenceCustomization::GetValue is incorrectly gating the assignment of the
ComponentProperty and
PathToComponent members based on OtherActor.IsValid() however OtherActor will be null if the component is one the same actor.
Changing the code to do something like this seems to resolve the issue:
// SetValue
FSoftComponentReference SoftValue;
if (Value.OtherActor.IsValid())
{
SoftValue.OtherActor = Value.OtherActor.Get();
}
SoftValue.ComponentProperty = Value.ComponentProperty;
SoftValue.PathToComponent = Value.PathToComponent;
// GetValue
FSoftComponentReference SoftReference = *reinterpret_cast<const FSoftComponentReference*>(RawPtr);
if (SoftReference.OtherActor.IsValid())
{
ThisReference.OtherActor = SoftReference.OtherActor.Get();
}
ThisReference.ComponentProperty = SoftReference.ComponentProperty;
ThisReference.PathToComponent = SoftReference.PathToComponent;
Btw the recent changes in UE5 Main (CL 51539355 and CL 50903512) are very helpful, thank you! we have cherrypicked those.
EDIT: Also we just noticed FSoftComponentReference::SerializeFromMismatchedTag has a similar issue
[Attachment Removed]