"Our dynamic duplicate in-memory replays broke when an artist put an ULevelSequencePlayer in one of the dynamic source level levels.

The UMovieSceneSequencePlayer base class has PostNetReceive called on it when the replay starts. This function thinks the sequence has changed state due to NetSyncProps.LastKnownPosition != PlayPosition.GetCurrentPosition(). This occurs even if the sequence has not had any state changed, but only for sequences that do not have their start position at frame 0.

This ends up calling JumpToFrame(NetSyncProps.LastKnownPosition), breaking the replay. It causes the view target of the camera manager to switch to a camera in the sequence rather than our replay view target.

The fix for this issue is to call UpdateNetworkSyncProperties() at the end of UMovieSceneSequencePlayer::Initialize.

This ensures that the network properties used by the replay have the correct initial values and no longer trigger the sequence to think the state has changed inside PostNetReceive."

Steps to Reproduce
  • Add a ULevelSequencePlayer to a Dynamic Source sublevel
  • Set the sequence to not start at frame 0 (our sequence started at -155!)
  • Run the level, trigger an in-memory replay, note that JumpToFrame(NetSyncProps.LastKnownPosition) is called as part of UMovieSceneSequencePlayer::PostNetReceive.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to AnswerHub just mention UE-86963 in the post.

Login to Vote

Affects Versions4.23
CreatedJan 16, 2020
UpdatedFeb 11, 2021