轨道类型概述
Texturge 的 Sequencer 集成通过专用轨道类型存储 UGlyphAnimation 的关键帧曲线。轨道系统定义于 Plugins/Texturge/Source/Texturge/Public/Animation/Tracks/。
轨道类总览
| 类 | 基类 | 说明 |
|---|---|---|
UMovieSceneGlyphAnimationTrack | UMovieSceneNameableTrack | 字形动画主轨道,管理多个类型化子轨道 |
UMovieSceneGlyphAnimationSection | UMovieSceneSection | 子轨道区段,每条对应一种轨道类型 |
UMovieSceneTextAnimationSection | — | 类型别名(using = UMovieSceneGlyphAnimationSection),仅用于旧资产序列化兼容 |
FTextAnimationSubTrackData | USTRUCT | 子轨道数据(轨道类型 + 显示名 + Float 通道数组) |
FTextAnimationTrack | USTRUCT | 旧版轨道类型(@deprecated,兼容保留) |
ETextAnimationTrackType | UENUM | 轨道类型标识(10 种) |
UMovieSceneGlyphAnimationTrack
主轨道类,承载 UGlyphAnimation 的全部子轨道:
- 内部持有
Sections数组(每条UMovieSceneGlyphAnimationSection对应一种轨道类型的子轨道)与隐藏的LayoutHelper布局辅助区段 AddSubTrack(ETextAnimationTrackType, FName)/RemoveSubTrack(int32)— 添加 / 移除类型化子轨道SupportsMultipleRows()返回true,每条子轨道独占一行GetLocalizedSubTrackDisplayName(FName)— 子轨道显示名本地化RenumberRows/SyncLayoutHelper— 内部维护行编号与布局辅助区段
UMovieSceneGlyphAnimationSection
子轨道区段,核心数据为 FTextAnimationSubTrackData SubTrack:
SetSubTrackData(ETextAnimationTrackType, const FName&)— 设置子轨道类型与显示名GetSubTrackDataMutable()— 可变访问(曲线编辑)CacheChannelProxy()— 将Channels注册到 Sequencer 通道代理(关键帧编辑入口)LinkedTrackId(FGuid)— 关联旧版文本动画轨道的链接标识
NOTE
UMovieSceneTextAnimationSection在源码中是UMovieSceneGlyphAnimationSection的 using 类型别名(MovieSceneTextAnimationSection.h仅此一条声明),保留用于反序列化旧资产。新代码直接使用UMovieSceneGlyphAnimationSection。
子轨道数据结构
FTextAnimationSubTrackData 根据轨道类型存储 1~4 条 FMovieSceneFloatChannel:
| 轨道类型 | 通道数 | 通道后缀 | 默认键值 |
|---|---|---|---|
Opacity | 1 | (无) | 1.0 |
LetterSpacing | 1 | (无) | 0.0 |
Rotation | 1 | (无) | 0.0 |
Translation | 2 | X / Y | 0.0 |
Scale | 2 | X / Y | 1.0 |
Shear | 2 | X / Y | 0.0 |
Pivot | 2 | X / Y | 0.5 |
ShadowOffset | 2 | X / Y | 0.0 |
Color | 4 | R / G / B / A | 1.0 |
ShadowColor | 4 | R / G / B / A | 0.0 |
通道数由 FTextAnimationSubTrackData::GetChannelCount(ETextAnimationTrackType) 决定(Float→1、Vector2D→2、Color→4)。
动画通道(21 通道)
10 种轨道类型展开为 21 条曲线通道,对应 FPerLayerCurves 的 21 个 TArray<FRichCurveKey> 与 FGlyphAnimationState 的属性:
变换(3 条 Float + 10 条 Vector2D 分量)
| 轨道类型 | 通道 | 所属状态属性 | 说明 |
|---|---|---|---|
Opacity | Curve_Opacity | Opacity | 不透明度(默认 1.0) |
LetterSpacing | Curve_LetterSpacing | LetterSpacing | 字间距(像素) |
Rotation | Curve_Rotation | Rotation | 旋转角度(度) |
Translation | Curve_TranslationX / Y | PositionOffset.X / Y | 位置偏移(像素) |
Scale | Curve_ScaleX / Y | Scale.X / Y | 缩放(默认 1.0) |
Shear | Curve_ShearX / Y | Shear.X / Y | 剪切变换 |
Pivot | Curve_PivotX / Y | Pivot.X / Y | 枢轴(默认 0.5) |
ShadowOffset | Curve_ShadowOffsetX / Y | ShadowOffset.X / Y | 阴影偏移(像素) |
颜色(8 条 Color 分量)
| 轨道类型 | 通道 | 所属状态属性 | 说明 |
|---|---|---|---|
Color | Curve_ColorR / G / B / A | Color.R / G / B / A | 染色:RGB = 染色色,A = 染色占比(0~1) |
ShadowColor | Curve_ShadowColorR / G / B / A | ShadowColor.R / G / B / A | 阴影颜色 |
NOTE
通道中的
Color.A是染色占比而非透明度——恒等值 Transparent (0,0,0,0),不染色时不参与乘法(恒为 0 会破坏乘法混合,求值器已改为加性叠色)。字形透明度由Opacity通道单独控制。
曲线提取
UGlyphAnimation 的关键帧曲线在烘焙时提取:
| 函数 | 说明 |
|---|---|
FAnimationCompiler::ExtractCurves(const UGlyphAnimation*) | 提取并返回 FGlyphCurveSet(21 条 FRichCurve) |
FAnimationCompiler::ExtractCurvesRef(const UGlyphAnimation*) | 零拷贝引用提取(UGlyphAnimation 内部缓存 CachedExtractedCurves + 指纹) |
提取基于 MovieScene 内所有 Track / Section 的 GetSignature() 做缓存——Sequencer 编辑仅更新 Section 签名,因此必须遍历所有子对象(详见《烘焙管线》)。
时序模式
播放时序由 UTextAnimator 的 EPlaybackMode 控制(轨道本身不携带时序模式):
| 模式 | 说明 |
|---|---|
Duration(持续时间模式) | 按总时长匀速播放 |
CPS(每秒字形数模式) | 按每秒揭示字形数驱动,CPS 下限 1.0 |
轨道编辑器
FGlyphAnimationTrackEditor(TexturgeEditor 模块 Private/TrackEditors 目录)扩展 FMovieSceneTrackEditor:
- 在 Sequencer UI 中渲染字形动画轨道与类型化子轨道
- 处理子轨道区段的创建、拖拽与调整
OnSubTrackAddedToSequencer(ETextAnimationTrackType)静态回调将新子轨道同步回蓝图- 仅在 Editor 构建中可用,不打包到运行时
播放方向
EPlayMode 定义层级的播放方向(FPerLayerCurves::PlayDirection):
| 枚举值 | 说明 |
|---|---|
Forward | 正向播放 |
Reverse | 反向播放 |
PingPong | 来回交替播放 |
EStagePlayDirection 在阶段粒度(UTextAnimationStageController)上提供同样的三个选项。循环次数由 FPerLayerCurves::NumberOfLoops 独立控制(0 = 无限循环)。