ISequencer :: OnStopEvent is executed when pause, but not when playing to the last frame and stopping automatically.
This is because OnStopDelegate.Broadcast(); is only in FSequencer::Pause(). When it stops automatically, the process is called in the following order, so pause () is not executed.
> UnrealEditor-MovieScene-Win64-Debug.dll! FMovieSceneTimeController :: StopPlaying (const FQualifiedFrameTime & InStopTime) Line 61 C ++ UnrealEditor-MovieScene-Win64-Debug.dll! FMovieSceneTimeController :: PlayerStatusChanged (EMovieScenePlayerStatus :: Type InStatus, const FQualifiedFrameTime & InCurrentTime) Line 43 C ++ UnrealEditor-Sequencer-Win64-Debug.dll! FSequencer :: SetPlaybackStatus (EMovieScenePlayerStatus :: Type InPlaybackStatus) Line 4176 C ++ UnrealEditor-Sequencer-Win64-Debug.dll! FSequencer :: SetLocalTimeLooped (FFrameTime NewLocalTime) Line 4846 C ++ UnrealEditor-Sequencer-Win64-Debug.dll! F Sequencer :: Tick (float InDeltaTime) Line 766 C ++
So you can fix this problem by adding pause() as below.
void FSequencer::SetLocalTimeLooped(FFrameTime NewLocalTime) { ...// Set the playback status if we need to if (NewPlaybackStatus.IsSet()) { //// //SetPlaybackStatus(NewPlaybackStatus.GetValue()); //// Evaluate the sequence with the new status //EvaluateInternal(EvalRange); if (NewPlaybackStatus->Stopped) { Pause(); } else { SetPlaybackStatus(NewPlaybackStatus.GetValue()); // Evaluate the sequence with the new status EvaluateInternal(EvalRange); } //// } }
expect : OnStopEvent and 1 event fire
result : does not fire
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-158921 in the post.
0 |
Component | UE - Anim - Sequencer |
---|---|
Affects Versions | 5.0 |
Target Fix | 5.1 |
Created | Jul 8, 2022 |
---|---|
Resolved | Jul 12, 2022 |
Updated | Jul 17, 2022 |