从 Texturge Alpha 迁移
Texturge Beta 引入了全新的动画编译管线、数据结构与运行时架构。本文档帮助 Alpha 用户平滑升级。
架构变更概览
| 领域 | Alpha | Beta |
|---|---|---|
| 曲线资产 | UTextAnimation(旧序列资产) | UGlyphAnimation(UMovieSceneSequence) |
| 动画蓝图 | 轨道数组 + 预定义参数 | UTextAnimationBlueprint + 蓝图变量即参数 |
| 轨道系统 | FTextAnimationTrack(10 条)+ FKeyFrame / EKeyInterp | Sequencer 原生 FloatChannel(UMovieSceneGlyphAnimationTrack / Section) |
| 帧数据 | FAnimationFrameData(逐帧数组) | FGlyphAnimationState(逐字形求值) |
| 烘焙管线 | 运行时内联编译(CompileFromAsset / EvaluateTime) | FAnimationCompiler::BakeAllStages(编译期烘焙) |
| 调度 | 轨道内 CharacterDelay / SelectionMode 等 8 参数 | FGlyphScheduleInfo + Layer/Factory 调度 API |
| 图层系统 | 无(单轨道叠加) | UGlyphAnimationLayer + UGlyphAnimationFactory(四混合模式) |
| 阶段系统 | 无 | Intro / Default / Outro 阶段系统 |
| 运行时 | UTextAnimator 驱动(含编译与求值) | 分离:UTextAnimationStageController(求值)+ 编译器(烘焙) |
| 指纹缓存 | 无 | CityHash64 双指纹(文本 + 蓝图) |
| 富文本 | 标签映射(UTextAnimationDataAsset) | <anim id="..."> 标签 + FAnimationEntry 覆盖映射 |
| 本地化 | 语义锚点(缓存/扫描机制) | ULocalizationSubsystem(锚点重定位接口,死机制已删除) |
关键类映射
蓝图与资产
| Alpha | Beta |
|---|---|
UTextAnimation(旧序列) | UGlyphAnimation(UMovieSceneSequence) |
| 动画蓝图资产 | UTextAnimationBlueprint(UBlueprint) |
UTextAnimationBlueprintGeneratedClass(旧编译输出) | 同名新生成类(CompiledTracks 兼容保留) |
| 蓝图实例 | UTextAnimInstance(CDO + 烘焙缓存) |
编译与烘焙
| Alpha | Beta |
|---|---|
CompileFromAsset() / EvaluateTime() | FAnimationCompiler::BakeAllStages(BP, Text, Customizer) |
FTextAnimationTrack / FKeyFrame | FGlyphCurveSet + Sequencer FloatChannel |
FAnimationFrameData | FGlyphAnimationState(10 字段) |
FPerCharacterTrackData | FGlyphScheduleInfo(StartDelay / bSkipAnimation) |
DataBridge(旧数据桥) | 已删除(ReadLegacyTracks 不再存在) |
| 无指纹 | ComputeTextFingerprint / ComputeBlueprintFingerprint(CityHash64) |
运行时
| Alpha | Beta |
|---|---|
UTextAnimator 播放控制 | UTextAnimationStageController(纯文本路径) |
UTextAnimator 富文本管线 | UTextAnimator(仅富文本编排,编译职责移交) |
UAnimatedTextBlock | 同(内部改为 StageController 驱动) |
| 轨道式混合 | UGlyphAnimationLayer / UGlyphAnimationFactory + ETextAnimationBlendMode |
迁移步骤
-
备份项目 — 迁移前创建完整备份(迁移为单向操作)
-
更新插件 — 移除 Alpha 插件,放入 Beta(
Plugins/Texturge),确认.upluginVersionName 为1.0.0-beta.1 -
重新生成项目文件 — 右键
.uproject→ 生成 Visual Studio 项目文件,重新编译;确认 Build.cs 依赖Texturge模块 -
重建动画资产:
- 创建
UTextAnimationBlueprint(内容浏览器右键 → Texturge → 文本动画蓝图) - 动画面板添加字形动画(
UGlyphAnimation)资产,在 Sequencer 中重建关键帧曲线 - 旧轨道参数(SelectionMode / CharacterDelay / TimingMode 等)已删除——延迟改用
FGlyphScheduleInfo::StartDelay,选择模式改用SkipAt/ 分类 API
- 创建
-
迁移 BuildDefaultAnimation — 覆盖
BuildDefaultAnimation(int32 GlyphCount, const FString& Text)(返回FBakedStage):
// Alpha(示意)
FBakedAnimation OldBuild(int32 GlyphCount, const FString& Text);
// Beta
FBakedStage BuildDefaultAnimation_Implementation(int32 GlyphCount, const FString& Text)
{
TArray<FGlyphScheduleInfo> Schedule = BuildScheduleInfos(Text);
UGlyphAnimationLayer* BaseLayer = CreateLayer(GlyphAnimations[0], ETextAnimationBlendMode::Override, Schedule);
UGlyphAnimationFactory* Factory = CreateFactory(BaseLayer, Schedule);
for (int32 i = 1; i < GlyphAnimations.Num(); ++i)
{
Factory->AddLayer(CreateLayer(GlyphAnimations[i], ETextAnimationBlendMode::Additive, Schedule));
}
return Factory->Bake();
}
- 更新 C++ 播放代码:
// Alpha(示意)
Animator->StartAnimating();
// Beta(手动路径)
FBakedAnimation Baked = FAnimationCompiler::BakeAllStages(AnimationBlueprint, Text);
UTextAnimationStageController* Controller = NewObject<UTextAnimationStageController>(this);
Controller->Initialize(&Baked, AnimationBlueprint);
Controller->Play();
TIP
UMG 控件路径无需手动管理——设置
UAnimatedTextBlock::TextAnimationBlueprint后控件自动完成编译、初始化与播放,直接调用Play()即可。
-
迁移富文本标签 — 将
UTextAnimationDataAsset的Entries重建:TagName对应新标签语法<anim id="TagName">…</>,动画蓝图引用改用Type字段(TObjectPtr<UTextAnimationBlueprint>) -
参数系统迁移 — 旧 C++ 预定义参数(DefaultGlyphDelay / AnimationIntensity 等)已删除:在蓝图类默认值(Class Defaults)中自行声明变量,运行时通过
SetBlueprintVariable系列节点 /UAnimParameterOverrides覆写 -
重新编译所有动画蓝图 — 打开每个
UTextAnimationBlueprint执行编译(Compile),确认无编译错误 -
测试所有动画 — 在设计器视口(
STextAnimationDesignerView)的预览模式中逐一验证;运行自动化测试(Texturge.Animation.*组)确认回归
不再存在的概念
以下 Alpha 概念在 Beta 中已删除或替代:
(SelectionMode / SelectionInterval / RandomProbability / CharacterSpacing / DurationControl / FixedTotalDuration / bInvertOpacity 等)→ 由FTextAnimationTrack8 个专用参数FGlyphScheduleInfo+ Layer/Factory API 替代(结构保留 @deprecated 兼容)→ Sequencer 原生 FloatChannel 插值FKeyFrame/EKeyInterp自定义插值→FAnimationFrameData逐帧数组FGlyphAnimationState逐字形求值→ 已删除DataBridge::ReadLegacyTracks/ReadLegacyKeyframes→ 已彻底移除(插值误差问题),改为逐层独立求值MergeSingleCurve/MergeLayerCurves曲线合并→ 已排除的架构模式,不要引入FAnimationLayerSetup中间包装类型→ 缓存失效由控件层 / 预览层负责NeedsRebake()运行时检查SDF 字体图集 / 纹理烘焙→ 仅逐字形曲线动画
常见问题
Q: 迁移后动画效果不同?
A: Beta 数据流完全重写,微调参数映射方式不同。在蓝图 BuildDefaultAnimation 中用 Layer / Factory 的 51 个微调函数逐步调整;SetStartDelayAt(-1, X) + SetDelayAt(-1, Y) 恢复错峰节奏。
Q: 旧资产可以降级回 Alpha 吗? A: 不可以。迁移是单向操作,请确保迁移前已备份。
Q: 我的项目有自定义 C++ 代码怎么办?
A: 检查所有 #include 引用,将 Alpha 类名替换为 Beta 对应类名(见映射表)。编译后修复剩余 API 差异;FTextAnimationTrack 等旧结构仅作序列化兼容保留,不要在新代码中使用。