When an actor's replicator is first created and initialized, FObjectReplicator::InitWithObject will use the archetype as the source object for copying the properties. From there, the custom delta property state is initialized, calling into FRepLayout::SendCustomDeltaProperty and then FFastArraySerializer::FastArrayDeltaSerialize.
However, the fast array serializer here is not the replicated object's but rather the archetype's, as the archetype is what was passed to SendCustomDeltaProperty. FastArrayDeltaSerialize then changes the DeltaFlags on the archetype's fast array serializer.
This does not seem to reproduce reliably, but if the blueprint is then saved after this occurs, these changes to the DeltaFlags can be saved to the CDO. Whenever the actor is then serialized, it will apply the incorrect DeltaFlags, causing FastArrayDeltaSerialize_DeltaSerializeStructs to be skipped.
Create a replicated class containing a replicated fast array property.
Create a blueprint asset based on this class.
In a multiplayer PIE session, observe the FFastArraySerializer struct's DeltaFlags are set to "HasDeltaBeenRequested" when FFastArraySerializer::FastArrayDeltaSerialize is called, and FastArrayDeltaSerialize_DeltaSerializeStructs is called as expected.
Save the blueprint asset.
In subsequent PIE sessions, observe the DeltaFlags are set to HasBeenSerialized in FastArrayDeltaSerialize, causing the call to FastArrayDeltaSerialize_DeltaSerializeStructs to be skipped.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-263080 in the post.
0 |
Component | UE - Networking |
---|---|
Target Fix | 5.7 |
Created | Mar 28, 2025 |
---|---|
Updated | Apr 7, 2025 |