When the first checkpoint is recorded, the correct array properties will be captured in the LifetimeChangelist. When these array items are later removed and another property on the actor is changed, the array values will be removed from the LifetimeChangelist.
However, the shadow data will still contain the data from the previous checkpoint, as comparisons are skipped for initial only properties. When recording the next checkpoint, if the same items have been added back to the array, the comparison against the shadow data will show that nothing has changed.
Note that this only occurs for the second checkpoint onward, as the property will not be recorded to the first checkpoint due to [Link Removed].
This issue can be worked around by skipping updating shadow data for InitialOnly properties when recording the replay.
It is also worth noting that this issue may occur for other replication conditions as well, such as COND_Dynamic (see CompareParentProperty in RepLayout.cpp).
See linked EPS case for repro project.
1. On a replicated actor with some other replicated properties, add a replicated array that uses the COND_InitialOnly replication condition.
2. Begin recording a replay.
3. While recording, add some items to the replicated array.
4. After this has been added, request a checkpoint.
5. After the checkpoint has been recorded, remove items from the array, and change one of the other non-InitialOnly replicated properties on the actor.
6. Add the removed items back into the array.
7. Request another checkpoint.
8. When playing back the replay, scrub to a time after the second checkpoint. Observe the items in the array have default values, rather than the value that was originally added.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-347051 in the post.
0 |
Component | UE - Networking |
---|---|
Affects Versions | 5.7 |
Created | Oct 2, 2025 |
---|---|
Updated | Oct 15, 2025 |