FCameraShakePreviewer is an FGCObject that strongly references the UCameraShakeBase instances it previews, and creates them outered to the previewed UWorld. Nothing releases them on world teardown, so after a Sequencer camera-shake trigger fires, the next editor map change leaves the outgoing world and its package alive and UEditorEngine::CheckForWorldGCLeaks raises a fatal error.
The only thing that frees the shakes is destruction of FCameraShakePreviewerLinkerExtension, which happens only once both camera-shake systems unlink — but UMovieSceneCameraShakeEvaluatorSystem::IsRelevantImpl reports the system as relevant precisely because the extension still holds a shake. A shake whose pattern never reports IsFinished() therefore pins its own owner permanently.
For now, we made a change to bind FWorldDelegates::OnWorldCleanup in FCameraShakePreviewerLinkerExtension and, on the world being cleaned up, call RemoveAllCameraShakes() on its previewers and drop them from the Previewers map. This releases the GC references before EditorDestroyWorld’s collection and also breaks the relevance cycle, since HasAnyShake() then returns false and the evaluator system can finally unlink.
Open a ULevelSequence containing a camera shake trigger track whose shake class has an infinite / looping pattern (i.e. UCameraShakeBase::IsFinished() never returns true).
Scrub or play the sequence so the trigger fires at least once. TriggerOneShotShakes adds a preview instance via FCameraShakePreviewer::AddCameraShake.
Open a different level (File > Open Level, or any path reaching FEditorFileUtils::LoadMap).
Fatal error as above. Setting gc.historysize 1 first makes the retaining chain visible.
[Attachment Removed]
I got an email saying I should provide additional information, so maybe the last post didn’t register. So I am posting again just in case. Let me know if you need more information