When recording a checkpoint, it is treated as an initial replication, as all the changed properties since the channel was opened need to be recorded.
This normally results in any initial only properties getting their latest values recorded to the checkpoint, even if they differ from their initial value at the start of recording. However, if the property is changed from this initial value, this will not be recorded to the next checkpoint that is saved after this change is made.
Before the checkpoint, the property is not compared and the change is not detected, since as expected, it is not the actor's initial replication. When the checkpoint is saved (with bNetInitial==true), the property is compared and the change detected, but FRepLayout::ReplicateProperties will not update the SendingRepState's LifetimeChangelist. It instead just uses the current LifetimeChangelist to determine what to record, with the change to the initial only property added to the LifetimeChangelist later. This results in subsequent checkpoints recording the updated value.
See linked UDN for repro project.
On a replicated actor, create a COND_InitialOnly replicated property.
Begin recording a replay, and after the actor has been initially recorded, update the value of this property and save a checkpoint in the replay.
Continue recording, saving more checkpoints to the replay.
Playback the replay and scrub past the first checkpoint.
Expected: The value of the property will be updated to the value set before the first checkpoint was saved.
Actual: The value of the property will remain at its initial value. Scrubbing to later checkpoints will see the property change to the updated value set before the first checkpoint was saved.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-243552 in the post.
0 |
Component | UE - Networking |
---|---|
Affects Versions | 5.6 |
Target Fix | 5.7 |
Created | Feb 5, 2025 |
---|---|
Updated | Feb 20, 2025 |