轨道类型概述

Texturge 的 Sequencer 集成通过专用轨道类型存储 UGlyphAnimation 的关键帧曲线。轨道系统定义于 Plugins/Texturge/Source/Texturge/Public/Animation/Tracks/

轨道类总览

基类说明
UMovieSceneGlyphAnimationTrackUMovieSceneNameableTrack字形动画主轨道,管理多个类型化子轨道
UMovieSceneGlyphAnimationSectionUMovieSceneSection子轨道区段,每条对应一种轨道类型
UMovieSceneTextAnimationSection类型别名using = UMovieSceneGlyphAnimationSection),仅用于旧资产序列化兼容
FTextAnimationSubTrackDataUSTRUCT子轨道数据(轨道类型 + 显示名 + Float 通道数组)
FTextAnimationTrackUSTRUCT旧版轨道类型(@deprecated,兼容保留)
ETextAnimationTrackTypeUENUM轨道类型标识(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 在源码中是 UMovieSceneGlyphAnimationSectionusing 类型别名MovieSceneTextAnimationSection.h 仅此一条声明),保留用于反序列化旧资产。新代码直接使用 UMovieSceneGlyphAnimationSection

子轨道数据结构

FTextAnimationSubTrackData 根据轨道类型存储 1~4 条 FMovieSceneFloatChannel

轨道类型通道数通道后缀默认键值
Opacity1(无)1.0
LetterSpacing1(无)0.0
Rotation1(无)0.0
Translation2 X / Y0.0
Scale2 X / Y1.0
Shear2 X / Y0.0
Pivot2 X / Y0.5
ShadowOffset2 X / Y0.0
Color4 R / G / B / A1.0
ShadowColor4 R / G / B / A0.0

通道数由 FTextAnimationSubTrackData::GetChannelCount(ETextAnimationTrackType) 决定(Float→1、Vector2D→2、Color→4)。

动画通道(21 通道)

10 种轨道类型展开为 21 条曲线通道,对应 FPerLayerCurves 的 21 个 TArray<FRichCurveKey>FGlyphAnimationState 的属性:

变换(3 条 Float + 10 条 Vector2D 分量)

轨道类型通道所属状态属性说明
OpacityCurve_OpacityOpacity不透明度(默认 1.0)
LetterSpacingCurve_LetterSpacingLetterSpacing字间距(像素)
RotationCurve_RotationRotation旋转角度(度)
TranslationCurve_TranslationX / YPositionOffset.X / Y位置偏移(像素)
ScaleCurve_ScaleX / YScale.X / Y缩放(默认 1.0)
ShearCurve_ShearX / YShear.X / Y剪切变换
PivotCurve_PivotX / YPivot.X / Y枢轴(默认 0.5)
ShadowOffsetCurve_ShadowOffsetX / YShadowOffset.X / Y阴影偏移(像素)

颜色(8 条 Color 分量)

轨道类型通道所属状态属性说明
ColorCurve_ColorR / G / B / AColor.R / G / B / A染色:RGB = 染色色,A = 染色占比(0~1)
ShadowColorCurve_ShadowColorR / G / B / AShadowColor.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 签名,因此必须遍历所有子对象(详见《烘焙管线》)。

时序模式

播放时序由 UTextAnimatorEPlaybackMode 控制(轨道本身不携带时序模式):

模式说明
Duration(持续时间模式)按总时长匀速播放
CPS(每秒字形数模式)按每秒揭示字形数驱动,CPS 下限 1.0

轨道编辑器

FGlyphAnimationTrackEditorTexturgeEditor 模块 Private/TrackEditors 目录)扩展 FMovieSceneTrackEditor

  • 在 Sequencer UI 中渲染字形动画轨道与类型化子轨道
  • 处理子轨道区段的创建、拖拽与调整
  • OnSubTrackAddedToSequencer(ETextAnimationTrackType) 静态回调将新子轨道同步回蓝图
  • 仅在 Editor 构建中可用,不打包到运行时

播放方向

EPlayMode 定义层级的播放方向(FPerLayerCurves::PlayDirection):

枚举值说明
Forward正向播放
Reverse反向播放
PingPong来回交替播放

EStagePlayDirection 在阶段粒度(UTextAnimationStageController)上提供同样的三个选项。循环次数由 FPerLayerCurves::NumberOfLoops 独立控制(0 = 无限循环)。

images/sequencer-track-hierarchy.png — Sequencer 截图:字形动画轨道(UGlyphAnimation 资产)展开显示多条类型化子轨道行(不透明度/平移/缩放/染色),每条子轨道含关键帧与 FloatChannel 曲线,通道后缀 X/Y/R/G/B/A 与分组名对应 — Sequencer screenshot: glyph animation track (UGlyphAnimation asset) expanded into typed sub-track rows (Opacity/Translation/Scale/Color), each with keyframes and FloatChannel curves, channel suffixes X/Y/R/G/B/A matching group names