创建自定义动画
本节引导你从零制作属于自己的文字动画:创建动画蓝图资产 → 添加字形动画 → 覆盖 BuildDefaultAnimation → 在 UMG 中播放。
TIP
如果你还没有用过内置预设,建议先完成《使用预设动画》熟悉控件与播放流程,再进入本节学习制作。
创建文本动画蓝图资产
适用场景:开始制作第一个自定义动画蓝图资产。
UTextAnimationBlueprint 是 Texturge 的核心创作资产。每个动画蓝图持有一组 UGlyphAnimation 曲线资产,设计师声明的蓝图变量即动画参数(预设库的 Duration / Glyph Delay 等参数就是这样实现的)。
-
内容浏览器右键 → Texturge 分类 → 文本动画蓝图(
UTextAnimationBlueprintFactory)
-
命名资产,如
TABP_Test -
双击打开文本动画蓝图编辑器
熟悉编辑器
适用场景:首次打开编辑器时了解各面板功能。
FTextAnimationBlueprintEditor 提供 Designer / Graph 双模式与 7 个标签页:
| 标签页 | 说明 |
|---|---|
| 设计器(AnimationDesigner) | WYSIWYG 设计视口(STextAnimationDesignerView),缩放/平移/网格/字体度量 |
| 动画列表(PreviewAnimationList) | 预览动画列表(STextAnimationPreviewList) |
| 时间轴(Timeline) | Sequencer 集成(UGlyphAnimation 关键帧编辑) |
| 详情(Details) | 蓝图详情面板 |
| 预览设置(PreviewSettings) | 预览参数(文本/字体/视口尺寸) |
| 轨道列表(TrackList) | 旧版轨道列表(兼容) |
| 预览视口(PreviewViewport) | 预览文本动画控件 |


添加字形动画资产
适用场景:为动画蓝图添加关键帧曲线资产。
UGlyphAnimation 是 UMovieSceneSequence 子类,存储 21 通道关键帧曲线。
-
在 动画列表 面板点击 +,创建新的字形动画资产(
UGlyphAnimation,或选择已有资产)
-
双击该资产,在 时间轴 Sequencer 中打开
-
在时间轴中先添加一条字形动画轨道(Glyph Animation Track),作为子轨道的容器
-
点击轨道右上角的 +,添加具体子轨道(如 不透明度 / 平移 / 缩放 / 染色等 10 种)
-
在子轨道的 FloatChannel 上添加关键帧并调整曲线(1 秒键轴为预设约定)

TIP
编辑器预览默认使用
"Hello Texturge"预览文本(UTexturgePreviewSceneConfig::PreviewText),可在 预览设置 面板修改。
构建默认动画函数
适用场景:正常创建自定义动画时,都需要覆盖 BuildDefaultAnimation,否则只会得到单个 GlyphAnimation 的默认烘焙结果。
BuildDefaultAnimation 是 UTextAnimInstance 上的 BlueprintNativeEvent,由 FAnimationCompiler::BakeAllStages 在烘焙时调用。覆盖后你可以控制曲线资产、调度、图层叠加和工厂后处理。
1. 切换到 Graph 模式
- 在文本动画蓝图编辑器中切换到 Graph 模式
- 在事件图表中右键 → 覆盖(Override) → 构建默认动画
- 添加
Event BuildDefaultAnimation节点,输入为GlyphCount和Text
2. 覆盖流程
- 拖动字形动画变量:在蓝图变量列表中直接拖动已添加的
UGlyphAnimation变量(例如TABP_Test),无需通过数组索引获取 - 创建基础层:使用
创建字形动画层(文本),将字形动画变量连接到Glyph Animation,Text连接到事件输入,混合模式选择Override - 创建工厂:使用
创建工厂(文本),传入基础层和Text,自动生成调度信息 - 添加叠加层(可选):继续用
创建字形动画层(文本)创建额外层,混合模式使用Additive/Multiply/CrossFade,再通过添加层叠加到工厂 - 工厂级后处理(可选):需要全局微调时,使用
乘算字形平移/加算字形旋转等工厂节点 - 烘焙并返回:调用
烘焙节点,将返回的FBakedStage连接到事件返回值
只有在需要逐字错峰、跳过空白、按分类调度等高级控制时,才需要手动使用
构建调度信息和设置字形延迟/设置起始延迟值等节点。
3. 要点
GlyphAnimations必须至少有一个有效资产,否则默认实现会返回空阶段- 每个 Layer/Factory 节点返回自身,可以链式调用
- 工厂级覆盖作用于所有层混合后的最终状态,不会随层数重复叠加
Index = -1表示作用于全部字形

编译动画蓝图
适用场景:完成配置后编译蓝图生成运行时烘焙数据。
- 点击工具栏 编译 按钮
FTextAnimationBlueprintCompilerContext执行 Kismet 编译,生成UTextAnimationBlueprintGeneratedClass,CompileCount递增- 编译后缓存失效,预览源自动切换(无 → 字形动画)触发重新烘焙
- 在预览视口观察动画效果
NOTE
预览文本仅用于编辑器实时预览,不影响运行时
UAnimatedTextBlock的实际显示文本。运行时文本由控件Text属性独立控制。
在 UMG 中使用
适用场景:将编译好的动画蓝图绑定到 UMG 控件。
创建控件
- 内容浏览器右键 > 用户界面 > Widget 蓝图,命名
WBP_HelloWorld - 在面板中搜索 动画文本块,拖入画布
- 调整控件尺寸与位置

绑定动画蓝图
- 选中画布中的动画文本块控件(
UAnimatedTextBlock),在细节面板设置 文本动画蓝图 为TABP_Test - 设置 文本 属性为运行时要显示的文本
- 可选:勾选 自动播放 或 循环播放
- 编译保存控件
通过参数覆盖微调
在细节面板展开 实例参数覆盖(UAnimParameterOverrides)的 6 组映射,按控件实例覆盖蓝图默认变量:
| 覆盖组 | 键 | 值类型 |
|---|---|---|
| 浮点覆盖 | 变量名 | float |
| 整数覆盖 | 变量名 | int32 |
| 布尔覆盖 | 变量名 | bool |
| 向量覆盖 | 变量名 | FVector |
| 颜色覆盖 | 变量名 | FLinearColor |
| 向量2D覆盖 | 变量名 | FVector2D |
每个变量行附带重置按钮(恢复蓝图默认值,CDO 永不修改)。


测试运行
适用场景:在 PIE 中验证游戏内实际播放效果。
- 关卡中创建控件并添加到视口(关卡蓝图:
事件 BeginPlay→创建控件→添加到视口) - 运行 PIE(
Alt+P) - 文字按动画蓝图定义的动画播放
运行时控制
适用场景:在蓝图或 C++ 中动态控制播放与参数。
UAnimatedTextBlock 蓝图节点:
播放/暂停/恢复/停止/跳转到结尾/是否正在播放设置蓝图变量(浮点/整数/布尔/向量/颜色/向量2D 6 重载)——运行时修改动画参数,触发冷却重烘焙(3 帧)- 事件:
字形揭示(蓝图)、动画完成(蓝图)
NOTE
VariableName须与动画蓝图类默认值(Class Defaults)中声明的变量名一致(FName比较不区分大小写)。int32 / bool 类型使用设置蓝图变量 (Int)/设置蓝图变量 (Bool)重载。
至此,你已经完成了从创建资产到运行时播放的完整制作流程。
TIP
把你的自定义动画发布为预设:制作完成后,在数据资产中为它配置标签条目,即可像内置预设一样通过
<anim id="...">标签在富文本中复用;进一步学习请前往《多图层动画》与《高级效果》。