#include <ComposableCameraPathGuidedTransition.h>

Inherits: UComposableCameraTransitionBase

A transition which utilizes a path (spline) to guide its position during transition. This transition leverages two InertializedTransitions to achieve smoothness. An intermediate camera will be spawned as a wrapper for the spline. So this transition will be more expensive than other transitions.

Public Attributes

Return Name Description
UComposableCameraTransitionBase * DrivingTransition
EComposableCameraPathGuidedTransitionType Type
TSoftObjectPtr< ACameraRig_Rail > RailActor
FVector2D GuideRange
UCurveFloat * SplineMoveCurve

DrivingTransition

UComposableCameraTransitionBase * DrivingTransition

Type

EComposableCameraPathGuidedTransitionType Type {  }

RailActor

TSoftObjectPtr< ACameraRig_Rail > RailActor

GuideRange

FVector2D GuideRange { 0.25, 0.75 }

SplineMoveCurve

UCurveFloat * SplineMoveCurve

Public Methods

Return Name Description
void OnBeginPlay_Implementation virtual
FComposableCameraPose OnEvaluate_Implementation virtual
float GetBlendWeightAt virtual const Evaluate the transition's timing curve at a given normalized progress in [0, 1]. Returns the blend weight this transition would apply at that progress — i.e. the shape of its Percentage-over-duration curve.
void DrawTransitionDebug virtual const Per-transition world-space debug hook.

OnBeginPlay_Implementation

virtual

virtual void OnBeginPlay_Implementation(float DeltaTime, const FComposableCameraPose & CurrentSourcePose, const FComposableCameraPose & CurrentTargetPose)

OnEvaluate_Implementation

virtual

virtual FComposableCameraPose OnEvaluate_Implementation(float DeltaTime, const FComposableCameraPose & CurrentSourcePose, const FComposableCameraPose & CurrentTargetPose)

GetBlendWeightAt

virtual const

virtual float GetBlendWeightAt(float NormalizedTime) const

Evaluate the transition's timing curve at a given normalized progress in [0, 1]. Returns the blend weight this transition would apply at that progress — i.e. the shape of its Percentage-over-duration curve.

Used exclusively by the debug panel to render a sparkline preview of the blend curve on top of the transition's progress bar. The call site is a one-per-frame-per-active-transition sample loop, so the implementation must stay cheap (no allocations, no state reads that mutate). NOT used on the runtime evaluation hot path — real blend weight is still derived from Percentage in OnEvaluate so that per-transition state (polynomials, curves, etc.) keeps driving it.

Default implementation returns the input unchanged, giving a linear diagonal — the right fallback for transitions whose concept of "blend weight" isn't a simple scalar of normalized time (Inertialized position path, for example, is a polynomial trajectory, not a scalar lerp; showing a diagonal there still reads as "progress = time" which is accurate for its rotational / overall progression).

Concrete overrides should be pure math — no reads of RemainingTime, TransitionTime, or any internal state. Use only the NormalizedTime argument plus the transition's authored UPROPERTYs (Exp, bSmootherStep, EvaluationCurveType, etc.).


DrawTransitionDebug

virtual const

virtual void DrawTransitionDebug(UWorld * World, bool bViewerIsOutsideCamera) const

Per-transition world-space debug hook.

Invoked from [UComposableCameraEvaluationTree::DrawTransitionsDebug](../core/UComposableCameraEvaluationTree.md#drawtransitionsdebug) while CCS.Debug.Viewport is on, once per frame for every transition that currently sits in an Inner node of the active director's tree (and, recursively, of any referenced director's tree — inter-context blends see both sides).

Default implementation is empty. Concrete transitions override, check their own CCS.Debug.Viewport.Transitions.<Name> CVar, and usually call DrawStandardTransitionDebug plus any type-specific extras (spline curve sample, feeler rays, etc.).

Parameters

  • World World to draw into. Routes through the world's LineBatcher, so the draw is visible in every viewport that renders this world (game + F8-ejected editor).

  • bViewerIsOutsideCamera True when the player is NOT viewing through the camera (F8 eject / SIE). Overrides use this to skip gizmos that would occlude the near plane — mostly the source/target frustum pyramids.

Compiled out in shipping builds.

Private Attributes

Return Name Description
AComposableCameraCameraBase * IntermediateCamera
ACameraRig_Rail * Rail
UComposableCameraInertializedTransition * EnterTransition
UComposableCameraInertializedTransition * ExitTransition
USplineComponent * InternalSpline
AActor * DebugSplineActor

IntermediateCamera

AComposableCameraCameraBase * IntermediateCamera { nullptr }

Rail

ACameraRig_Rail * Rail

EnterTransition

UComposableCameraInertializedTransition * EnterTransition { nullptr }

ExitTransition

UComposableCameraInertializedTransition * ExitTransition { nullptr }

InternalSpline

USplineComponent * InternalSpline

DebugSplineActor

AActor * DebugSplineActor

Private Methods

Return Name Description
void BuildInternalSpline

BuildInternalSpline

void BuildInternalSpline(const FComposableCameraPose & CurrentTargetPose, float DeltaTime)