Hi Heather,
I was able to investigate the cause of this issue, which is a conflict between the Parent Constraint and Sequencer’s Transform Track trying to affect the constrained actor. The following situation emerges:
(1) Once a “parent” constraint is active, every editor tick executes the following call chain:
FConstraintTickFunction::ExecuteTick() FConstraintTickFunction::EvaluateFunctions() UTickableTransformConstraint::SetChildGlobalTransform() UTransformableComponentHandle::SetGlobalTransform() FConstraintsManagerController::Get(World).OnSceneComponentConstrained().Broadcast()
(2) Once an F3DTransformTrackEditor is active, it does:
UMovieScene3DTransformSection::ConstraintChannelAdded().AddRaw(this, &F3DTransformTrackEditor::HandleOnConstraintAdded);
Inside that delegate:
FConstraintsManagerController::Get(World).OnSceneComponentConstrained().AddLambda(...)
And inside that lambda:
GUnrealEd->UpdatePivotLocationForSelection() // This resets the pivot
This ends up resetting the pivot every frame, even for unrelated actors, even while not manipulating the transform widget in any way, and even if the transform track has no keyframes. And it also seems to happen with possessables, as long as the same actor is simultaneously affected by a Parent Constraint and by a Transform Track from Sequencer.
The good news is that, in my tests, the bad behavior went away as soon as I deleted the Transform Track that was targeting the constrained actor. I assume that track is not required, since attempting to use it would certainly conflict with the evaluation of the constraint.
In any case, I have filed an internal bug report for this issue. You should be able to track progress on it here once the engine devs mark it as public: UE-304960.
Please let me know if you need anything further.
Best regards,
Vitor