Modifiers target camera node classes and change selected node parameters. See Concepts -> Modifiers for lifecycle and gameplay guidance.

UComposableCameraNodeModifierDataAsset

Concrete data asset. This is the object gameplay code adds and removes.

Field Type Purpose
ApplyMode EComposableCameraModifierApplyMode Chooses whether effective-set changes reactivate the camera or mutate the current camera instance in place.
Modifiers TArray<UComposableCameraModifierBase*> Instanced wrapper entries. Each entry is either Node Type override mode or Custom Modifier Class mode.
OverrideEnterTransition UComposableCameraTransitionBase* Optional camera-pose transition used when adding a ReactivateCamera asset.
OverrideExitTransition UComposableCameraTransitionBase* Optional camera-pose transition used when removing a ReactivateCamera asset.
OverrideEnterValueTransition UComposableCameraModifierTransitionBase* Optional value transition used when adding a ModifyExistingInstance asset.
OverrideReplaceValueTransition UComposableCameraModifierTransitionBase* Optional value transition used when one in-place asset replaces another on the same property.
OverrideExitValueTransition UComposableCameraModifierTransitionBase* Optional value transition used when removing a ModifyExistingInstance asset.
CameraTagQuery FGameplayTagQuery Boolean tag expression selecting which camera tag containers match this asset. Empty matches all cameras.
CameraTags FGameplayTagContainer Deprecated legacy tag list. Migrated to an ANY query during load.
Priority int32 Higher value wins when multiple matching assets target the same node property.

Registered in the Content Browser under Composable Camera System -> Node Modifier Data Asset.

Apply Modes

ReactivateCamera is the default and existing behavior. When the effective modifier set changes, the PCM reconstructs the current camera from its source type asset, applies the selected modifier values before initialization, and blends from the old camera pose to the new camera pose.

ModifyExistingInstance keeps the current camera actor and node instances alive. It takes ownership of checked node properties, writes them into the live node, and optionally blends supported property values through a modifier value transition. This mode is for retuning properties on nodes that are already in the graph; it never inserts nodes into the Evaluation Tree.

Continuous value transitions are available only for property types with built-in interpolation support. Discrete properties switch when the value transition weight reaches DiscreteSwitchWeight.

UComposableCameraModifierTransitionBase

Stateless timing template for ModifyExistingInstance value transitions. It does not evaluate camera poses and is not a UComposableCameraTransitionBase.

Field Purpose
Duration Seconds to move from source value to target value. Zero applies immediately.
BlendFunction Linear, smoothstep, ease, or custom-curve timing function.
BlendExponent Exponent used by the ease modes.
CustomCurve Optional normalized curve for CustomCurve timing.
DiscreteSwitchWeight Weight threshold at which discrete property values switch.

UComposableCameraModifierBase

Base wrapper and legacy extension class.

Field or function Purpose
bUseCustomModifierClass Selects Custom Modifier Class mode. False means generic Node Type override mode.
NodeTemplate Node Type override template. Checked properties copy from this template into matching runtime nodes.
OverrideProperties Serialized property names enabled for Node Type mode.
CustomModifier Instanced user-authored modifier object used in Custom Modifier Class mode.
NodeClass Legacy/custom target class. Generic wrappers derive the target from NodeTemplate.
ApplyModifier(Node) Blueprint event used by custom modifier subclasses.
IsNodePropertyContinuouslyBlendable(Property) Runtime/editor eligibility helper for value-transition interpolation.

Node Type Overrides

In Node Type mode, choose a camera node class and check the properties that should be overridden. Only editable, non-transient, non-deprecated, top-level node properties are eligible. Properties marked with NoModifierOverride are intentionally hidden.

For ReactivateCamera, checked fields are applied before node initialization and are protected from pin auto-resolution for that activation. For ModifyExistingInstance, checked fields are applied to the live node and remain owned by the modifier runtime state until the modifier exits.

Custom Modifier Class

Custom mode owns an instanced user-authored subclass of UComposableCameraModifierBase. The nested modifier supplies NodeClass and receives the legacy ApplyModifier(Node) Blueprint event after initialization.

Use this mode when the modifier needs logic instead of a static property copy. ModifyExistingInstance is intended for Node Type overrides, not arbitrary Blueprint mutation.

Matching and Priority

The modifier manager filters active assets through CameraTagQuery, then resolves Node Type entries per (exact node class, property) by Priority. Empty queries match every camera. Legacy CameraTags data keeps its previous "any of these tags" behavior after migration.

Disjoint checked properties on the same node class can come from different modifier assets at the same time. Overlapping properties still elect one winner by priority, then registration order. Custom Modifier Class entries remain whole-node winners because their Blueprint side effects cannot declare per-property ownership.

Transitions

For ReactivateCamera, add/remove changes use camera-pose transitions: OverrideEnterTransition, OverrideExitTransition, then normal camera transition resolution.

For ModifyExistingInstance, add/remove changes use value transitions: OverrideEnterValueTransition, OverrideReplaceValueTransition, OverrideExitValueTransition, or immediate application when no value transition is set. A null Replace transition preserves the legacy priority handoff rule; set a zero-duration Replace transition for an explicitly immediate replacement.

Non-Transient Cameras Only

Transient cameras skip modifier resolution. Clear bIsTransient if a cinematic or temporary camera must respond to modifiers.

See Also