核心概念与架构
Texturge 的核心理念是将文本中的每个**字形(Glyph)**视为独立的可动画实体。通过在运行时对每个字符的变换(位置、缩放、旋转、修剪)、颜色、不透明度、阴影和字间距进行逐帧控制,实现从打字机逐字揭示到复杂逐字动画的全部效果。
模块结构
Texturge 由两个模块组成:
| 模块 | 类型 | 职责 |
|---|---|---|
Texturge | Runtime | 动画核心、多格式文本解析、Slate 控件、本地化、音效 |
TexturgeEditor | Editor | 动画蓝图编辑器、设计器视口、Sequencer 集成、编译器 |
核心数据流
Texturge 的动画管线遵循 蓝图 → 实例 → 动画器 的三阶段流程:
┌─────────────────────────────────────────────────────────────────────┐
│ 编辑时(Editor) │
│ │
│ UTextAnimationBlueprint ──编译──▶ UTextAnimationBlueprintGeneratedClass │
│ (轨道配置 + 关键帧) (编译后的 GeneratedClass) │
│ │
│ UTextAnimation ──Sequencer──▶ FloatChannel 关键帧曲线 │
│ (MovieScene 序列资产) │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 运行时(Runtime) │
│ │
│ UTextAnimInstance ──CompileFromAsset()──▶ CompiledTrackData │
│ (从蓝图编译) (逐轨逐帧数据数组) │
│ │ │
│ ▼ │
│ UTextAnimator ──TickAnimation()──▶ EvaluateTime() │
│ (动画管线引擎) (实时采样混合所有轨道) │
│ │ │
│ ▼ │
│ FAnimationFrameData[] ──OnPaint──▶ FTextRun / SAnimatedTextBlock │
│ (每字符帧数据缓存) (Slate 层逐字符渲染) │
└─────────────────────────────────────────────────────────────────────┘
两种使用路径
Texturge 提供两种控件以满足不同的使用场景:
| 路径 | 控件 | 适用场景 |
|---|---|---|
| 纯文本路径 | UAnimatedTextBlock | 单一动画效果,整段文本统一控制。直接指定 TextAnimationBlueprint 资产。 |
| 多格式文本路径 | UAnimatedRichTextBlock | 多动画混合,通过内联标签对不同文本片段应用不同动画。使用 TextAnimationDataAsset 定义标签→动画映射。 |
两种路径共享同一套底层管线(UTextAnimator → UTextAnimInstance),区别仅在于输入方式:
- 纯文本路径:整个文本块使用一个
UTextAnimationBlueprint,生成一个UTextAnimInstance。 - 多格式文本路径:通过
FTagParser解析内联标签 →FRenderTreeBuilder构建渲染树 → 每个动画标签对应独立的UTextAnimInstance。
关键资产类型
| 资产 | 基类 | 作用 |
|---|---|---|
UTextAnimationBlueprint | UBlueprint | 动画蓝图,配置轨道和关键帧,对标 UMG 的 UWidgetBlueprint |
UTextAnimation | UMovieSceneSequence | 文本动画序列,存储 MovieScene 时间轴数据 |
UTextAnimationDataAsset | UDataAsset | 多格式文本动画数据资产,定义标签名 → 动画蓝图的映射表 |
UTextAnimInstance | UObject | 动画实例,编译蓝图资产并在运行时求值动画帧数据 |
UTextAnimator | UObject | 动画器,打字机动画管线引擎,驱动逐字揭示与帧生成 |
系统要求
- 引擎版本:Unreal Engine 5.7 及以上
- 平台:Windows(Win64)、macOS、Linux
- 依赖:CommonUI(可选集成)