动画轨道与关键帧
Texturge 提供 10 条类型化动画轨道,每条轨道控制 FAnimationFrameData 的一个属性分量。多条轨道组合叠加,形成完整的逐字符动画效果。
轨道模型
FTextAnimationTrack 结构
struct FTextAnimationTrack
{
FGuid TrackId; // 轨道唯一标识符
FName TrackName; // 轨道名称(蓝图辨识用)
ETextAnimationTrackType TrackType; // 轨道类型(决定控制哪个属性)
float StartTime; // 起始时间(秒)
float Duration; // 持续时间(秒)
float TrackWeight; // 轨道权重(0~1)
bool bEnabled; // 是否启用
bool bInvertOpacity; // 透明度反转(仅不透明度轨道)
ETextAnimationBlendMode BlendMode; // 混合模式
TArray<FKeyFrame> KeyFrames; // 关键帧数组
// -- 字符应用与时序 --
ECharacterApplicationMode ApplicationMode; // 应用模式
int32 ApplicationInterval; // 间隔数
bool bApplyToFirstChar; // 是否应用首字符
float RandomProbability; // 随机占比
ETextAnimationTimingMode TimingMode; // 时序模式
float TotalTextDuration; // 总文本时长
int32 CharacterDelayFrames; // 字符间延迟帧数
};
轨道类型总览
浮点属性
| 轨道 | 枚举值 | 对应 FAnimationFrameData 字段 | 说明 |
|---|---|---|---|
| 不透明度 | Opacity | Opacity (0~1) | 字符透明/显现效果。配合 bInvertOpacity 可实现默认隐藏→揭示。 |
| 字间距 | LetterSpacing | LetterSpacing (px) | 字符间距的逐字动画 |
| 旋转角度 | Rotation | Rotation (度) | 字符旋转,以 Pivot 为中心 |
二维向量属性
| 轨道 | 枚举值 | 对应字段 | 说明 |
|---|---|---|---|
| 平移 | Translation | PositionOffset (px) | 字符位置偏移。X/Y 独立控制 |
| 缩放 | Scale | Scale (X/Y) | 字符缩放比例。(1,1) = 原始大小 |
| 修剪 | Shear | Shear (X/Y) | 剪切变换。(0,0) = 无修剪 |
| 枢纽 | Pivot | Pivot (0~1) | 变换枢轴。(0.5,0.5) = 字符中心 |
| 阴影偏移 | ShadowOffset | ShadowOffset (px) | 字符阴影的位置偏移 |
颜色属性
| 轨道 | 枚举值 | 对应字段 | 说明 |
|---|---|---|---|
| 染色 | Color | Color | 字符颜色。可与原文本颜色混合 |
| 阴影染色 | ShadowColor | ShadowColor | 字符阴影颜色。Transparent = 无阴影 |
帧数据结构
每个字符在每一帧的完整状态由 FAnimationFrameData 结构体描述:
struct FAnimationFrameData
{
// 变换
FVector2D PositionOffset; // 位置偏移
FVector2D Scale; // 缩放 (1,1)
float Rotation; // 旋转角度
FVector2D Shear; // 修剪变换
FVector2D Pivot; // 变换枢轴 (0.5,0.5)
// 颜色
FLinearColor Color; // 染色 (白色 = 不染色)
float Opacity; // 不透明度 (1 = 完全显示)
// 阴影
FVector2D ShadowOffset; // 阴影偏移
FLinearColor ShadowColor; // 阴影颜色
// 排版
float LetterSpacing; // 字间距 (0 = 默认)
};
恒等帧(Identity Frame)是所有属性为默认值的帧数据——Opacity=1, Scale=(1,1), Color=White, Pivot=(0.5,0.5),其余属性为 0。未揭示字符返回恒等帧(Opacity 为 0),不产生可见渲染。
关键帧系统
FKeyFrame 结构
struct FKeyFrame
{
FGuid KeyId; // 关键帧唯一标识
float Time; // 时间(相对轨道起始,秒)
float FloatValue; // Float 类型值
FVector2D Vector2DValue; // Vector2D 类型值
FLinearColor ColorValue; // Color 类型值
EKeyInterp InterpType; // 插值类型
};
每个关键帧根据轨道的值类型仅使用对应字段——Float 轨道使用 FloatValue,Vector2D 轨道使用 Vector2DValue,Color 轨道使用 ColorValue。
插值类型
| 插值 | 枚举值 | 曲线形态 |
|---|---|---|
| 线性 | Linear | 匀速直线过渡 |
| 三次 | Cubic | 贝塞尔平滑曲线 |
| 常量 | Constant | 无过渡,保持至下一关键帧 |
| 三次缓入缓出 | CubicInOut | S 形缓动曲线 |
插值在 UTextAnimInstance 的静态方法中实现:
InterpolateKeyFramesFloat()— 浮点插值InterpolateKeyFramesVector2D()— 向量插值InterpolateKeyFramesColor()— 颜色插值
轨道混合模式
多条轨道叠加时,通过混合模式控制轨道间的相互作用:
| 混合模式 | 枚举值 | 行为 |
|---|---|---|
| 加法混合 | Additive | 将轨道结果逐项加到基础值上 |
| 覆盖混合 | Override | 轨道结果完全替代基础值 |
| 乘法混合 | Multiply | 将轨道结果与基础值逐项相乘 |
| 交叉淡化 | CrossFade | 轨道结果与基础值按权重交叉过渡 |
混合在 UTextAnimInstance::BlendFrames() 中执行,按轨道权重(TrackWeight)加权。
字符应用模式
决定动画效果应用到哪些字符:
| 模式 | 枚举值 | 说明 |
|---|---|---|
| 逐字符 | PerCharacter | 所有字符均应用动画效果(默认) |
| 间隔 | Interval | 每间隔 N 个字符应用动画。由 ApplicationInterval 和 bApplyToFirstChar 控制 |
| 随机 | Random | 按 RandomProbability 比例随机选择字符应用动画 |
时序模式
决定每字符动画的时长计算方式。FTextAnimationTrack 中的 ETextAnimationTimingMode 与 Sequencer 根轨道的 EDurationMode 为对应关系:
| Sequencer 根轨道标签 | 轨道结构体标签 | 枚举值 | 说明 |
|---|---|---|---|
| 每字符时长 | 字符动画时长 | PerCharacterDuration | 每字符动画独立计时,总时长 = 字符数 × Duration |
| 固定总时长 | 总文本动画时长 | TotalDuration | 所有字符在指定总时长内均匀分布完成 |
CharacterDelayFrames 控制字符间的起始延迟(帧数),0 表示所有字符同时开始动画。