Hi! I’m trying to figure out how to make Mover 2.0 and our existing sequences play nice with each other. The sequences have transform and rotation tracks applied to the actors and mover is fighting the external changing of the actor’s transform.
I realized that it was walking mode that was causing the jittering so I tried creating a SequencerControlledMovementMode that just sets the OutputState.SyncState to UpdatedComponent’s transform in SimulationTick_Implementation.
This stops the jitter but it doesn’t stop the warning spam on every keyframe where it’s changed. The warning comes from the MoverComponent::SimulationTick that’s being called by the liason.
I understand the purpose of this warning and I definitely need it for other places where designers might be doing things I don’t want them to do. I also don’t want to make my animator’s lives harder or have log spam.
At this point I’m thinking of adding an engine change to MoverComponent to add a function that sets a bool that only disables the warning and then setting it in my movement mode.
It’s a standalone project so I’m not worried about replication causing poor quality motion during the Sequencer.
I don’t really like this solution from a maintenance standpoint since I expect we’re going to have to merge many updates to Mover. Is there a better solution I’m not seeing?
Steps to Reproduce
Create a Sequencer track using a mover example character or other pawn using mover using Sequencer transform position or rotation nodes.
The character will jitter and pop as the sequencer tries to control it’s position and rotation and mover tries to restore it.
The log will be filled with these messages. (Trimmed for readability).
LogMover: Warning: XXX ROLE_Authority: Simulation start location disagrees with actual mover component location. This indicates movement of the component out-of-band with the simulation, and may cause poor quality motion.
You’re in luck! We just submitted some new options to control how movement from external systems is handled, to help with cases like Sequencer / cinematic control.
This will be in the next UE release, but the change should be easy to patch in to whatever version you’re working with:
What about constraints (UTickableTransformConstraint)? Seems there will still be a race condition there. Or anything touching the SceneComponent transform that runs during actor tick that the MoverComponent doesn’t have a prerequisite on. The external motion check will only reliably catch modifications made pre actor graph tick. Or is frame delayed response part of the design?