#include <MovieSceneComposableCameraShotTrack.h>

Inherits: UMovieSceneNameableTrack

Sequencer track that drives Composable Camera Shots — Phase E of Shot-Based Keyframing.

Each section on the track represents one Shot activation window in the timeline. The active Shot's data ([FComposableCameraShot](../structs/FComposableCameraShot.md#fcomposablecamerashot)) is pushed every frame into the bound [AComposableCameraLevelSequenceActor](../actors/AComposableCameraLevelSequenceActor.md#acomposablecameralevelsequenceactor)'s internal [UComposableCameraCompositionFramingNode::Shot](../nodes/UComposableCameraCompositionFramingNode.md#shot-2) UPROPERTY by the UMovieSceneComposableCameraShotTrackInstance — so the runtime CCS pipeline runs unchanged (TickCamera evaluates the framing node, the solver builds a pose, the LS Component projects it to the CineCamera).

Track binding model

Bound under an [AComposableCameraLevelSequenceActor](../actors/AComposableCameraLevelSequenceActor.md#acomposablecameralevelsequenceactor) (or subclass — notably the Phase E [AComposableCameraLevelSequenceShotActor](../actors/AComposableCameraLevelSequenceShotActor.md#acomposablecameralevelsequenceshotactor)) binding row, NOT root-level. The track has no TargetActorBinding field — its parent in the outliner is the binding it drives. The track editor (Phase E.4) surfaces the menu entry only when the binding's class matches.

Multi-row + overlap semantics (V1)

Rows enabled. When multiple sections overlap on different rows the top row wins (lowest row index → highest priority — Sequencer's standard ordering, mirrors Camera Cut). Phase F will reinterpret overlap as a transition zone with multi-Shot blending at the CompositionFramingNode level; the LSComponent's shot-override map is already designed to hold multiple active entries to support this.

Phase F outlook

Easing is currently disabled — Phase F adds inter-Shot CCS Transitions on the section level, at which point easing handles drive the transition's blend window. V1 sections are hard-cut.

Section exit semantics

CompositionFramingNode::Shot retains the last-written value when no section is active (gap between sections / past the final section). This is intentional — the camera holds its last framing rather than snapping back to a default. Designers explicitly add a new section to change the framing.

Modeled on [UMovieSceneComposableCameraPatchTrack](UMovieSceneComposableCameraPatchTrack.md#umoviescenecomposablecamerapatchtrack) for layout consistency. Shot-track-specific divergences:

  • Bound (under a binding row), not root.

  • No easing in V1.

  • No TargetActorBinding (the bound actor IS the parent binding).

Public Methods

Return Name Description
UMovieSceneComposableCameraShotTrack
void AddSection virtual
bool SupportsType virtual const
UMovieSceneSection * CreateNewSection virtual
bool SupportsMultipleRows virtual const inline
EMovieSceneTrackEasingSupportFlags SupportsEasing virtual const
const TArray< UMovieSceneSection * > & GetAllSections virtual const
bool HasSection virtual const
bool IsEmpty virtual const
void RemoveSection virtual
void RemoveSectionAt virtual
void RemoveAllAnimationData virtual

UMovieSceneComposableCameraShotTrack

UMovieSceneComposableCameraShotTrack(const FObjectInitializer & ObjectInitializer)

AddSection

virtual

virtual void AddSection(UMovieSceneSection & Section)

SupportsType

virtual const

virtual bool SupportsType(TSubclassOf< UMovieSceneSection > SectionClass) const

CreateNewSection

virtual

virtual UMovieSceneSection * CreateNewSection()

SupportsMultipleRows

virtual const inline

virtual inline bool SupportsMultipleRows() const

SupportsEasing

virtual const

virtual EMovieSceneTrackEasingSupportFlags SupportsEasing(FMovieSceneSupportsEasingParams & Params) const

GetAllSections

virtual const

virtual const TArray< UMovieSceneSection * > & GetAllSections() const

HasSection

virtual const

virtual bool HasSection(const UMovieSceneSection & Section) const

IsEmpty

virtual const

virtual bool IsEmpty() const

RemoveSection

virtual

virtual void RemoveSection(UMovieSceneSection & Section)

RemoveSectionAt

virtual

virtual void RemoveSectionAt(int32 SectionIndex)

RemoveAllAnimationData

virtual

virtual void RemoveAllAnimationData()

Private Attributes

Return Name Description
TArray< TObjectPtr< UMovieSceneSection > > Sections

Sections

TArray< TObjectPtr< UMovieSceneSection > > Sections