Sequencer Integration

Texturge deeply integrates with UE5’s Sequencer framework, enabling the use of MovieScene timelines and FloatChannel keyframe curves to edit text animations, synchronized with cutscenes in Level Sequencer.

Architecture

UTextAnimation

UMovieSceneSequence
    └── UTextAnimation           ← Texturge text animation sequence
         ├── MovieScene           ← Standard UMovieScene (contains tracks)
         └── DisplayLabel         ← Editor display name

UTextAnimation is a subclass of UMovieSceneSequence, analogous to UWidgetAnimation. It contains a UMovieScene instance and supports keyframe editing through the Sequencer editor.

Key features:

  • Thread-safe post-load (IsPostLoadThreadSafe() = true)
  • No possessable object bindings (pure property animation)
  • IsTrackSupportedImpl() filters to only support Texturge custom tracks

MovieScene Tracks

MovieSceneTextAnimationTrack    ← Sequencer master track
    └── MovieSceneTextAnimationSection  ← Track section
          └── FloatChannel[]            ← FloatChannel per property track

MovieSceneTextAnimationTrack and MovieSceneTextAnimationSection map the 10 track types’ FloatChannel data back into FTextAnimationTrack structures for extraction by UTextAnimInstance::BuildTracksFromTextAnimation().

Sequencer Editing Workflow

In the Animation Blueprint Editor

  1. Open a UTextAnimationBlueprint asset → the Texturge Animation Blueprint Editor launches automatically
  2. Create a UTextAnimation sequence in the Sequencer panel
  3. Add track types via the “Add Track” button (10 types: Opacity, Translation, Scale, etc.)
  4. Add and edit keyframes on FloatChannel curves
  5. Drag the playhead to preview animation effects in real-time in the designer viewport

Editor Preview Mechanism

When Sequencer time changes, the editor drives the designer preview through the following flow:

Sequencer::OnGlobalTimeChanged()


FTextAnimationBlueprintEditor::OnSequencerGlobalTimeChanged()


UTextAnimInstance::EvaluateTime(ScrubPosition)


TArray<FAnimationFrameData> FrameData


STextAnimationDesignerView::SetPreviewFrameDataOverride(FrameData)


UTextAnimator::SetPreviewFrameDataOverride(FrameData)


SAnimatedTextBlock::OnPaint() queries HasPreviewFrameData() → uses injected frame data

The bUpdatingPreview re-entrancy guard prevents OnSequencerGlobalTimeChanged from being called recursively.

Using in Level Sequencer

Texturge’s TrackEditor (FTextAnimationTrackEditor) can add text animation tracks to Level Sequencer, enabling synchronized playback of text animations with level cutscenes.

CineCamera Sync Example

LevelSequencer
├── CineCameraActor Track
│   └── Transform Section        ← Camera movement
├── TextAnimation Track
│   └── TextAnimation Section    ← Text animation (synced with camera)
│       ├── Opacity Channel      ← Fade-in curve
│       └── Translation Channel  ← Bounce-in curve
images/sequencer-text-animation.png — Sequencer panel: TextAnimation master track expanded showing Opacity/Translation/Scale sub-tracks with FloatChannel Bezier fade-in curve
images/level-sequencer-integration.png — Level Sequencer overview: CineCameraActor track + Texturge TextAnimation track playing in sync