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:
- 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();
}
}