LevelSequence events created in C++ not triggered in Packaged Build

Hi,

I’m facing a typical issue in creating and receving events via event track in ULevelSequence (entirely in c++). The exact problem that I’m facing is:

  1. Event is received in c++ callback in Editor Build, but not in packaged build

I’m stuck for around 3 days now, it will be great if you guys can help.

	
	EObjectFlags Flags = RF_Public | RF_Transactional | RF_Standalone;
	masterLevelSeqRef = NewObject<ULevelSequence>(GetWorld(), FName("MasterLevelSequencer"), Flags | RF_Transactional);
	masterLevelSeqRef->Initialize();
	FString debugMessage = FString::Printf(TEXT("Unable to load level sequence"));
	if (masterLevelSeqRef) {
		debugMessage = FString::Printf(TEXT("Successfully loaded level sequence"));
	} 
	GEngine->AddOnScreenDebugMessage(1, 20., FColor::Green, debugMessage);
	UE_LOG(LogTemp, Warning, TEXT("%s"), *debugMessage);

	UMovieScene* movieScene = masterLevelSeqRef->GetMovieScene();
	if (!movieScene) return false;

	UMovieSceneEventTrack* eventTrack = NewObject<UMovieSceneEventTrack>(movieScene, TEXT("EventTrack"));
	if (!eventTrack) return false;

	eventTrack->bFireEventsWhenForwards = true;
	eventTrack->bFireEventsWhenBackwards = true;

	UMovieSceneEventTriggerSection* eventSection = NewObject<UMovieSceneEventTriggerSection>(eventTrack, TEXT("FieldEvents"));
	if (!eventSection) return false;

	eventSection->SetRange(TRange<FFrameNumber>(0, 30));
	eventTrack->AddSection(*eventSection);

	if (eventSection->TryModify(true)) {
		FMovieSceneEventChannel& eventChannel = eventSection->EventChannel;

		FFrameNumber keyTime = 10;

		FMovieSceneEvent eventData;

		eventData.Ptrs.Function = this->FindFunctionChecked(TEXT("OnKeyEvent"));

		auto keyIndex = eventChannel.GetData().AddKey(keyTime, eventData);

		FMovieSceneSequencePlaybackSettings PlaybackSettings;
		ALevelSequenceActor* levelActor = nullptr;
		ULevelSequencePlayer* levelSequencePlayer = ULevelSequencePlayer::CreateLevelSequencePlayer(
			GetWorld()->GetCurrentLevel(), masterLevelSeqRef, PlaybackSettings, levelActor);

		eventTrack->EvalOptions.bEvaluateInPreroll = true;
		movieScene->SetPlaybackRange(TRange<FFrameNumber>(0, 30));
		movieScene->AddGivenTrack(eventTrack);
		if (levelSequencePlayer)
		{
			levelSequencePlayer->Play();
		}
	}
2 Likes

Following this thread

Facing the same issue