运行时模块概述

运行时模块(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

两条运行时路径:纯文本路径UAnimatedTextBlockUTextAnimationStageControllerFBakedAnimation)与富文本路径UAnimatedRichTextBlockUTextAnimator → 渲染树 + 多条目烘焙)。纯文本路径使用烘焙管线,富文本路径在运行期由动画器编排多条目播放。

初始化流程

C++ 手动驱动

// 1. 编译:蓝图 + 文本 → 烘焙动画
FBakedAnimation Baked = FAnimationCompiler::BakeAllStages(AnimationBlueprint, MyDisplayText);

// 2. 创建阶段控制器并注入烘焙数据
UTextAnimationStageController* Controller = NewObject<UTextAnimationStageController>(this);
Controller->Initialize(&Baked, AnimationBlueprint);

// 3. 每帧推进(通常由控件 OnPaint 驱动)
Controller->TickAnimation(DeltaTime);

控件自动流程

UAnimatedTextBlock 内部封装完整流程:设置 TextAnimationBlueprintParameterOverrides 属性后,控件在 SynchronizeProperties() 中自动触发编译、创建控制器并绑定委托。运行时调用 Play() 即可播放。

UAnimatedTextBlock 属性类型说明
TextAnimationBlueprintUTextAnimationBlueprint*驱动动画的蓝图资产(仅支持单一动画,不支持 RichText 标签解析)
ParameterOverridesUAnimParameterOverrides*实例级参数覆盖容器(Instanced)
bAutoPlaybool初始化完成后自动播放
bLoopPlaybackbool循环播放

播放控制

控制器与控件均提供统一的播放生命周期:

方法说明
Play()开始播放动画
Pause()暂停时间推进,保持当前状态
Resume()从暂停点恢复播放
Stop()停止并重置
SkipToEnd()立即显示全部字形(控件层)
RevealAll()立即揭示所有字形(控制器层)

UTextAnimationStageController::TickAnimation(float DeltaTime) 由宿主控件在每帧驱动,推进阶段时钟并调用 EvaluateAllGlyphs

舞台系统

动画阶段由 EAnimationStage 枚举定义(Intro / Default / Outro)。控制器维护 CurrentStageStageTime,推进时钟并在播放完成后广播 OnAnimationComplete

交叉淡入淡出

UTextAnimationBlueprint::StageTransitionConfigFStageTransitionConfig)定义阶段过渡参数:IntroToDefaultCrossFadeDefaultToOutroCrossFade(默认 0.1s)与 EasingFunc,参与蓝图指纹哈希。

控件绑定

控件基类内部驱动文本类型
UAnimatedTextBlockUTextBlockUTextAnimationStageController纯文本
UAnimatedRichTextBlockURichTextBlockUTextAnimator富文本(标签 → 动画条目映射)

两个控件均通过 Slate OnPaint 每帧驱动动画 Tick。

TIP

动画 Tick 由 OnPaint 驱动而非独立 Tick 函数。如果控件不可见(未被绘制),动画不会推进。需要后台动画时请手动调用 TickAnimation 驱动。

参数覆盖

UAnimParameterOverrides 提供 6 组覆盖映射(FloatOverrides / IntOverrides / BoolOverrides / VectorOverrides / ColorOverrides / Vector2DOverrides),键为蓝图变量名。控件属性 ParameterOverrides 为 Instanced 对象,每个控件实例独立持有;烘焙时由 FAnimInstanceCustomizer 写入烘焙临时实例,蓝图 CDO 永不修改。

images/runtime-overview.png — 运行时模块架构总览:左侧烘焙管线(蓝图 + 文本 → FAnimationCompiler → FBakedAnimation),右侧运行时求值链(UTextAnimationStageController → FBakedGlyph::Evaluate → FGlyphAnimationState → UAnimatedTextBlock OnPaint 渲染) — Runtime module architecture overview: bake pipeline (blueprint + text → FAnimationCompiler → FBakedAnimation) on the left, runtime evaluation chain (UTextAnimationStageController → FBakedGlyph::Evaluate → FGlyphAnimationState → UAnimatedTextBlock OnPaint rendering) on the right