Animation Tracks & Keyframes
Texturge provides 10 typed animation tracks, each controlling one property component of FAnimationFrameData. Multiple tracks combine and layer to form complete per-character animation effects.
Track Model
FTextAnimationTrack Structure
struct FTextAnimationTrack
{
FGuid TrackId; // Unique track identifier
FName TrackName; // Track name (for Blueprint identification)
ETextAnimationTrackType TrackType; // Track type (determines which property to control)
float StartTime; // Start time (seconds)
float Duration; // Duration (seconds)
float TrackWeight; // Track weight (0~1)
bool bEnabled; // Whether enabled
bool bInvertOpacity; // Invert opacity (opacity tracks only)
ETextAnimationBlendMode BlendMode; // Blend mode
TArray<FKeyFrame> KeyFrames; // Keyframe array
// -- Character application & timing --
ECharacterApplicationMode ApplicationMode; // Application mode
int32 ApplicationInterval; // Interval count
bool bApplyToFirstChar; // Whether to apply to first character
float RandomProbability; // Random proportion
ETextAnimationTimingMode TimingMode; // Timing mode
float TotalTextDuration; // Total text duration
int32 CharacterDelayFrames; // Inter-character delay frames
};
Track Type Overview
Float Properties
| Track | Enum Value | FAnimationFrameData Field | Description |
|---|---|---|---|
| Opacity | Opacity | Opacity (0~1) | Character transparency/reveal effect. Use with bInvertOpacity for default-hidden→reveal. |
| Letter Spacing | LetterSpacing | LetterSpacing (px) | Per-character letter spacing animation |
| Rotation | Rotation | Rotation (degrees) | Character rotation, centered on Pivot |
Vector2D Properties
| Track | Enum Value | Field | Description |
|---|---|---|---|
| Translation | Translation | PositionOffset (px) | Character position offset. X/Y independently controlled |
| Scale | Scale | Scale (X/Y) | Character scale. (1,1) = original size |
| Shear | Shear | Shear (X/Y) | Shear transform. (0,0) = no shear |
| Pivot | Pivot | Pivot (0~1) | Transform pivot. (0.5,0.5) = character center |
| Shadow Offset | ShadowOffset | ShadowOffset (px) | Character shadow position offset |
Color Properties
| Track | Enum Value | Field | Description |
|---|---|---|---|
| Color | Color | Color | Character tint color. Can blend with original text color |
| Shadow Color | ShadowColor | ShadowColor | Character shadow color. Transparent = no shadow |
Frame Data Structure
The complete state of each character in each frame is described by the FAnimationFrameData struct:
struct FAnimationFrameData
{
// Transform
FVector2D PositionOffset; // Position offset
FVector2D Scale; // Scale (1,1)
float Rotation; // Rotation angle
FVector2D Shear; // Shear transform
FVector2D Pivot; // Transform pivot (0.5,0.5)
// Color
FLinearColor Color; // Tint (White = no tint)
float Opacity; // Opacity (1 = fully visible)
// Shadow
FVector2D ShadowOffset; // Shadow offset
FLinearColor ShadowColor; // Shadow color
// Typography
float LetterSpacing; // Letter spacing (0 = default)
};
Identity Frame is the frame data with all default values — Opacity=1, Scale=(1,1), Color=White, Pivot=(0.5,0.5), remaining fields at 0. Unrevealed characters return an identity frame with Opacity=0, producing no visible rendering.
Keyframe System
FKeyFrame Structure
struct FKeyFrame
{
FGuid KeyId; // Unique keyframe identifier
float Time; // Time (relative to track start, seconds)
float FloatValue; // Float type value
FVector2D Vector2DValue; // Vector2D type value
FLinearColor ColorValue; // Color type value
EKeyInterp InterpType; // Interpolation type
};
Each keyframe uses only the field corresponding to its track’s value type — Float tracks use FloatValue, Vector2D tracks use Vector2DValue, Color tracks use ColorValue.
Interpolation Types
| Interpolation | Enum Value | Curve Shape |
|---|---|---|
| Linear | Linear | Uniform straight-line transition |
| Cubic | Cubic | Bezier smooth curve |
| Constant | Constant | No transition, held until next keyframe |
| Cubic In-Out | CubicInOut | S-curve easing |
Interpolation is implemented in UTextAnimInstance’s static methods:
InterpolateKeyFramesFloat()— float interpolationInterpolateKeyFramesVector2D()— vector interpolationInterpolateKeyFramesColor()— color interpolation
Track Blend Modes
When multiple tracks are layered, blend modes control how they interact:
| Blend Mode | Enum Value | Behavior |
|---|---|---|
| Additive | Additive | Add track result item-by-item to the base value |
| Override | Override | Track result fully replaces the base value |
| Multiply | Multiply | Multiply track result with the base value item-by-item |
| CrossFade | CrossFade | Cross-fade between track result and base value by weight |
Blending is performed in UTextAnimInstance::BlendFrames(), weighted by track weight (TrackWeight).
Character Application Modes
Determines which characters the animation applies to:
| Mode | Enum Value | Description |
|---|---|---|
| Per-Character | PerCharacter | All characters receive the animation (default) |
| Interval | Interval | Animation applied every N characters. Controlled by ApplicationInterval and bApplyToFirstChar |
| Random | Random | Randomly select characters by RandomProbability proportion |
Timing Modes
Determines how per-character animation duration is calculated. ETextAnimationTimingMode in FTextAnimationTrack maps to EDurationMode in the Sequencer root track:
| Sequencer Root Label | Track Struct Label | Enum Value | Description |
|---|---|---|---|
| Per-Character | Character Animation Duration | PerCharacterDuration | Each character animates independently; total = characters × Duration |
| Fixed Total | Total Text Animation Duration | TotalDuration | All characters complete within the specified total duration, evenly distributed |
CharacterDelayFrames controls the start delay between characters (in frames). 0 means all characters begin animating simultaneously.