运行时模块概述
运行时模块(Texturge)是插件的核心子系统,负责编译期烘焙、运行时求值与 UMG 渲染。它将设计师在蓝图中定义的动画(UTextAnimationBlueprint)编译为 FBakedAnimation 烘焙数据,再由 UTextAnimationStageController 逐帧求值为 FGlyphAnimationState,最终由控件绘制到屏幕。
核心概念
| 概念 | 说明 |
|---|---|
UTextAnimationBlueprint | 动画蓝图资产(UBlueprint 子类),持有 GlyphAnimations 列表、StageTransitionConfig 与蓝图变量 |
UGlyphAnimation | 字形动画序列资产(UMovieSceneSequence 子类),存储 21 通道关键帧曲线 |
UTextAnimInstance | 蓝图生成的实例,持有烘焙缓存,暴露 BuildDefaultAnimation 蓝图事件 |
FAnimationCompiler | 纯函数编译器,将蓝图 + 文本编译为 FBakedAnimation |
FBakedAnimation | 完整烘焙结果,包含 Intro / Default / Outro 三阶段 FBakedStage 与双指纹 |
FBakedStage / FBakedGlyph | 单阶段 / 单字形烘焙数据,FBakedGlyph 内含多层 FPerLayerCurves |
UTextAnimationStageController | 运行时阶段控制器,驱动烘焙数据的播放、暂停、阶段转换与求值 |
UTextAnimator | 打字机管线引擎,驱动 UAnimatedRichTextBlock(富文本多条目路径) |
FGlyphAnimationState | 单字形渲染状态(位置/缩放/旋转/染色/阴影等 10 字段) |
UAnimatedTextBlock / UAnimatedRichTextBlock | 两个 UMG 控件,分别走控制器与动画器路径 |
NOTE
两条运行时路径:纯文本路径(
UAnimatedTextBlock→UTextAnimationStageController→FBakedAnimation)与富文本路径(UAnimatedRichTextBlock→UTextAnimator→ 渲染树 + 多条目烘焙)。纯文本路径使用烘焙管线,富文本路径在运行期由动画器编排多条目播放。
初始化流程
C++ 手动驱动
// 1. 编译:蓝图 + 文本 → 烘焙动画
FBakedAnimation Baked = FAnimationCompiler::BakeAllStages(AnimationBlueprint, MyDisplayText);
// 2. 创建阶段控制器并注入烘焙数据
UTextAnimationStageController* Controller = NewObject<UTextAnimationStageController>(this);
Controller->Initialize(&Baked, AnimationBlueprint);
// 3. 每帧推进(通常由控件 OnPaint 驱动)
Controller->TickAnimation(DeltaTime);
控件自动流程
UAnimatedTextBlock 内部封装完整流程:设置 TextAnimationBlueprint 与 ParameterOverrides 属性后,控件在 SynchronizeProperties() 中自动触发编译、创建控制器并绑定委托。运行时调用 Play() 即可播放。
UAnimatedTextBlock 属性 | 类型 | 说明 |
|---|---|---|
TextAnimationBlueprint | UTextAnimationBlueprint* | 驱动动画的蓝图资产(仅支持单一动画,不支持 RichText 标签解析) |
ParameterOverrides | UAnimParameterOverrides* | 实例级参数覆盖容器(Instanced) |
bAutoPlay | bool | 初始化完成后自动播放 |
bLoopPlayback | bool | 循环播放 |
播放控制
控制器与控件均提供统一的播放生命周期:
| 方法 | 说明 |
|---|---|
Play() | 开始播放动画 |
Pause() | 暂停时间推进,保持当前状态 |
Resume() | 从暂停点恢复播放 |
Stop() | 停止并重置 |
SkipToEnd() | 立即显示全部字形(控件层) |
RevealAll() | 立即揭示所有字形(控制器层) |
UTextAnimationStageController::TickAnimation(float DeltaTime) 由宿主控件在每帧驱动,推进阶段时钟并调用 EvaluateAllGlyphs。
舞台系统
动画阶段由 EAnimationStage 枚举定义(Intro / Default / Outro)。控制器维护 CurrentStage 与 StageTime,推进时钟并在播放完成后广播 OnAnimationComplete。
交叉淡入淡出
UTextAnimationBlueprint::StageTransitionConfig(FStageTransitionConfig)定义阶段过渡参数:IntroToDefaultCrossFade、DefaultToOutroCrossFade(默认 0.1s)与 EasingFunc,参与蓝图指纹哈希。
控件绑定
| 控件 | 基类 | 内部驱动 | 文本类型 |
|---|---|---|---|
UAnimatedTextBlock | UTextBlock | UTextAnimationStageController | 纯文本 |
UAnimatedRichTextBlock | URichTextBlock | UTextAnimator | 富文本(标签 → 动画条目映射) |
两个控件均通过 Slate OnPaint 每帧驱动动画 Tick。
TIP
动画 Tick 由
OnPaint驱动而非独立 Tick 函数。如果控件不可见(未被绘制),动画不会推进。需要后台动画时请手动调用TickAnimation驱动。
参数覆盖
UAnimParameterOverrides 提供 6 组覆盖映射(FloatOverrides / IntOverrides / BoolOverrides / VectorOverrides / ColorOverrides / Vector2DOverrides),键为蓝图变量名。控件属性 ParameterOverrides 为 Instanced 对象,每个控件实例独立持有;烘焙时由 FAnimInstanceCustomizer 写入烘焙临时实例,蓝图 CDO 永不修改。