创建自定义动画

本节引导你从零制作属于自己的文字动画:创建动画蓝图资产 → 添加字形动画 → 覆盖 BuildDefaultAnimation → 在 UMG 中播放。

TIP

如果你还没有用过内置预设,建议先完成《使用预设动画》熟悉控件与播放流程,再进入本节学习制作。

创建文本动画蓝图资产

适用场景:开始制作第一个自定义动画蓝图资产。

UTextAnimationBlueprint 是 Texturge 的核心创作资产。每个动画蓝图持有一组 UGlyphAnimation 曲线资产,设计师声明的蓝图变量即动画参数(预设库的 Duration / Glyph Delay 等参数就是这样实现的)。

  1. 内容浏览器右键 → Texturge 分类 → 文本动画蓝图UTextAnimationBlueprintFactory

    内容浏览器右键菜单位置:Texturge 分类下选择“文本动画蓝图”

  2. 命名资产,如 TABP_Test

  3. 双击打开文本动画蓝图编辑器

熟悉编辑器

适用场景:首次打开编辑器时了解各面板功能。

FTextAnimationBlueprintEditor 提供 Designer / Graph 双模式与 7 个标签页:

标签页说明
设计器(AnimationDesigner)WYSIWYG 设计视口(STextAnimationDesignerView),缩放/平移/网格/字体度量
动画列表(PreviewAnimationList)预览动画列表(STextAnimationPreviewList
时间轴(Timeline)Sequencer 集成(UGlyphAnimation 关键帧编辑)
详情(Details)蓝图详情面板
预览设置(PreviewSettings)预览参数(文本/字体/视口尺寸)
轨道列表(TrackList)旧版轨道列表(兼容)
预览视口(PreviewViewport)预览文本动画控件

设计器视口:WYSIWYG 预览文本动画效果,支持缩放/平移/网格与字体度量

图表视口:用于覆盖 BuildDefaultAnimation 事件,编排字形动画层/工厂/烘焙节点

添加字形动画资产

适用场景:为动画蓝图添加关键帧曲线资产。

UGlyphAnimationUMovieSceneSequence 子类,存储 21 通道关键帧曲线。

  1. 动画列表 面板点击 +,创建新的字形动画资产(UGlyphAnimation,或选择已有资产)

    在动画列表中创建/选择字形动画资产

  2. 双击该资产,在 时间轴 Sequencer 中打开

  3. 在时间轴中先添加一条字形动画轨道(Glyph Animation Track),作为子轨道的容器

  4. 点击轨道右上角的 +,添加具体子轨道(如 不透明度 / 平移 / 缩放 / 染色等 10 种)

  5. 在子轨道的 FloatChannel 上添加关键帧并调整曲线(1 秒键轴为预设约定)

    轨道设置与关键帧编辑:在子轨道上调整 FloatChannel 曲线

TIP

编辑器预览默认使用 "Hello Texturge" 预览文本(UTexturgePreviewSceneConfig::PreviewText),可在 预览设置 面板修改。

构建默认动画函数

适用场景:正常创建自定义动画时,都需要覆盖 BuildDefaultAnimation,否则只会得到单个 GlyphAnimation 的默认烘焙结果。

BuildDefaultAnimationUTextAnimInstance 上的 BlueprintNativeEvent,由 FAnimationCompiler::BakeAllStages 在烘焙时调用。覆盖后你可以控制曲线资产、调度、图层叠加和工厂后处理。

1. 切换到 Graph 模式

  1. 在文本动画蓝图编辑器中切换到 Graph 模式
  2. 在事件图表中右键 → 覆盖(Override)构建默认动画
  3. 添加 Event BuildDefaultAnimation 节点,输入为 GlyphCountText

2. 覆盖流程

  1. 拖动字形动画变量:在蓝图变量列表中直接拖动已添加的 UGlyphAnimation 变量(例如 TABP_Test),无需通过数组索引获取
  2. 创建基础层:使用 创建字形动画层(文本),将字形动画变量连接到 Glyph AnimationText 连接到事件输入,混合模式选择 Override
  3. 创建工厂:使用 创建工厂(文本),传入基础层和 Text,自动生成调度信息
  4. 添加叠加层(可选):继续用 创建字形动画层(文本) 创建额外层,混合模式使用 Additive / Multiply / CrossFade,再通过 添加层 叠加到工厂
  5. 工厂级后处理(可选):需要全局微调时,使用 乘算字形平移 / 加算字形旋转 等工厂节点
  6. 烘焙并返回:调用 烘焙 节点,将返回的 FBakedStage 连接到事件返回值

只有在需要逐字错峰、跳过空白、按分类调度等高级控制时,才需要手动使用 构建调度信息设置字形延迟 / 设置起始延迟值 等节点。

3. 要点

  • GlyphAnimations 必须至少有一个有效资产,否则默认实现会返回空阶段
  • 每个 Layer/Factory 节点返回自身,可以链式调用
  • 工厂级覆盖作用于所有层混合后的最终状态,不会随层数重复叠加
  • Index = -1 表示作用于全部字形

蓝图图表总览:BuildDefaultAnimation 覆盖事件中,拖动字形动画变量 → 创建字形动画层(文本) → 创建工厂(文本) → 添加层 → 烘焙 → 返回的完整连线

编译动画蓝图

适用场景:完成配置后编译蓝图生成运行时烘焙数据。

  1. 点击工具栏 编译 按钮
  2. FTextAnimationBlueprintCompilerContext 执行 Kismet 编译,生成 UTextAnimationBlueprintGeneratedClassCompileCount 递增
  3. 编译后缓存失效,预览源自动切换(无 → 字形动画)触发重新烘焙
  4. 在预览视口观察动画效果

NOTE

预览文本仅用于编辑器实时预览,不影响运行时 UAnimatedTextBlock 的实际显示文本。运行时文本由控件 Text 属性独立控制。

在 UMG 中使用

适用场景:将编译好的动画蓝图绑定到 UMG 控件。

创建控件

  1. 内容浏览器右键 > 用户界面 > Widget 蓝图,命名 WBP_HelloWorld
  2. 面板中搜索 动画文本块,拖入画布
  3. 调整控件尺寸与位置

创建控件并绑定动画蓝图的结果展示:画布中的动画文本块已配置 TABP_Test 蓝图

绑定动画蓝图

  1. 选中画布中的动画文本块控件(UAnimatedTextBlock),在细节面板设置 文本动画蓝图TABP_Test
  2. 设置 文本 属性为运行时要显示的文本
  3. 可选:勾选 自动播放循环播放
  4. 编译保存控件

通过参数覆盖微调

细节面板展开 实例参数覆盖UAnimParameterOverrides)的 6 组映射,按控件实例覆盖蓝图默认变量:

覆盖组值类型
浮点覆盖变量名float
整数覆盖变量名int32
布尔覆盖变量名bool
向量覆盖变量名FVector
颜色覆盖变量名FLinearColor
向量2D覆盖变量名FVector2D

每个变量行附带重置按钮(恢复蓝图默认值,CDO 永不修改)。

蓝图中创建的完整参数列表:显示 Duration、Glyph Delay、Intensity 等变量

UMG 细节面板完整显示的参数列表:实例参数覆盖中列出全部蓝图变量

测试运行

适用场景:在 PIE 中验证游戏内实际播放效果。

  1. 关卡中创建控件并添加到视口(关卡蓝图:事件 BeginPlay创建控件添加到视口
  2. 运行 PIE(Alt+P
  3. 文字按动画蓝图定义的动画播放

运行时控制

适用场景:在蓝图或 C++ 中动态控制播放与参数。

UAnimatedTextBlock 蓝图节点:

  • 播放 / 暂停 / 恢复 / 停止 / 跳转到结尾 / 是否正在播放
  • 设置蓝图变量(浮点/整数/布尔/向量/颜色/向量2D 6 重载)——运行时修改动画参数,触发冷却重烘焙(3 帧)
  • 事件:字形揭示(蓝图)动画完成(蓝图)

NOTE

VariableName 须与动画蓝图类默认值(Class Defaults)中声明的变量名一致(FName 比较不区分大小写)。int32 / bool 类型使用 设置蓝图变量 (Int) / 设置蓝图变量 (Bool) 重载。

至此,你已经完成了从创建资产到运行时播放的完整制作流程。

TIP

把你的自定义动画发布为预设:制作完成后,在数据资产中为它配置标签条目,即可像内置预设一样通过 <anim id="..."> 标签在富文本中复用;进一步学习请前往《多图层动画》与《高级效果》。