编辑器工具

编辑器模块(TexturgeEditor)为动画创作提供完整的 WYSIWYG 环境:双击 UTextAnimationBlueprint 资产打开自定义蓝图编辑器,内含设计器视口、动画列表、Sequencer 时间轴与预览控制。

FTextAnimationBlueprintEditor

核心动画蓝图编辑器,继承 FBlueprintEditor(Kismet 基础框架)。

class TEXTURGEEDITOR_API FTextAnimationBlueprintEditor : public FBlueprintEditor
{
    void InitTextAnimationEditor(const EToolkitMode::Type Mode,
                                 const TSharedPtr<IToolkitHost>& InitToolkitHost,
                                 UTextAnimationBlueprint* InBlueprint);
    void Compile();
    TSharedPtr<ISequencer>& GetSequencer();
    void ChangeViewedAnimation(UGlyphAnimation& InAnimation);
    UGlyphAnimation* GetCurrentAnimation() const;
    UGlyphAnimation* RefreshCurrentAnimation();
    void SetActivePreviewSource(ETexturgePreviewSource NewSource);
    FPreviewSourceMediator* GetPreviewSourceMediator() const;
    UTexturgePreviewSceneConfig* GetPreviewSceneConfig() const;
    UTextAnimInstance* GetPreviewAnimInstance() const;
    float GetScrubPosition() const;
    void SetScrubPosition(float InTime);
    int32 AddTrack();
    int32 AddTrack(ETextAnimationTrackType InType);
    void RemoveTrack(int32 InTrackIndex);
    const TArray<FTextAnimationTrack>& GetTracks() const;
    static TSharedPtr<FTextAnimationBlueprintEditor> GetActiveEditor();
};

双模式布局

编辑器基于 FWorkflowCentricApplication 注册两个应用模式(FTextAnimBPEditorModes):

模式FName用途
Designer 模式TextAnimBP_DesignerMode设计器视口 + 动画列表 + Sequencer 时间轴 + 预览
Graph 模式TextAnimBP_GraphMode标准 Kismet 蓝图图表编辑(BuildDefaultAnimation 事件图)

七标签页

编辑器窗口通过 7 个静态 TabId 注册标签页:

TabId标签页说明
AnimationDesignerTabId设计器STextAnimationDesignerView 字形设计视口
TrackListTabId轨道列表旧版轨道列表(兼容)
TimelineTabId时间轴Sequencer 集成(UGlyphAnimation 关键帧编辑)
DetailsTabId详情蓝图详情面板
PreviewSettingsTabId预览设置FPreviewSettingsTabFactory 提供的预览参数面板(Designer/Graph 两模式复用)
PreviewAnimationListTabId动画列表STextAnimationPreviewList 预览动画列表
PreviewViewportTabId预览视口预览文本动画控件

工作流

  1. 双击文本动画蓝图UTextAnimationBlueprint)资产打开编辑器(UTextAnimationBlueprintFactory 负责创建)
  2. 动画列表 标签页添加 / 管理字形动画UGlyphAnimation)资产
  3. 时间轴 Sequencer 视图中编辑关键帧曲线(21 通道)
  4. Graph 模式 下覆盖 BuildDefaultAnimation 事件,使用 UGlyphAnimationLayer / UGlyphAnimationFactory 节点编排动画
  5. 预览设置 中配置预览文本(默认 "Hello Texturge")与字体
  6. 点击 编译(Compile)触发编译:FTextAnimationBlueprintCompilerContext → 生成 UTextAnimationBlueprintGeneratedClass
  7. 编译后 InvalidateBakeCache + 预览源切换(None → GlyphAnimation)自动重新烘焙

STextAnimationDesignerView

WYSIWYG 字形设计器视口,继承 STextAnimationDesignSurfaceFGCObjectIUMGDesigner 接口。

class STextAnimationDesignerView : public STextAnimationDesignSurface, public FGCObject, public IUMGDesigner
{
    void SetPreviewFrameDataOverride(const TArray<FGlyphAnimationState>& InFrameData);
    void ClearPreviewFrameDataOverride();
    void SetPreviewAnimationList(TSharedPtr<STextAnimationPreviewList> InList);
    void SetAnimationList(TSharedPtr<STextAnimationList> InList);
    // IUMGDesigner 接口
    float GetPreviewScale() const;
    FGeometry GetDesignerGeometry() const;
    // 预览尺寸
    FOptionalSize GetPreviewAreaWidth() const;
    void SetPreviewAreaSize(int32 Width, int32 Height);
    float GetPreviewDPIScale() const;
};
特性说明
缩放与平移滚轮缩放(约 31 级)、右键/中键拖动平移、缩放至适应
网格可配置间距的设计网格与吸附
标尺水平/垂直标尺(STextAnimationRuler),带光标指示线与字体度量菜单
字体度量Baseline / LineBounds / ClusterBounds / GlyphBounds 四类度量叠加(FontMetric_* 标志位)
预览帧覆盖SetPreviewFrameDataOverride 注入烘焙帧数据,OnPaint 使用覆盖数据渲染
效果层STextAnimationPaintSurface 绘制选择框 / 悬停高亮

Slate 组成(私有实现,复制自引擎 SDesignSurface 体系并适配):

  • STextAnimationDesignSurface — 设计画布基类(缩放/平移/网格渲染)
  • STextAnimationPaintSurface — 委托绘制层(选择框、悬停高亮)
  • STextAnimationDesignerToolBar — 工具栏(缩放、网格、吸附、字体度量、ZoomToFit)
  • STextAnimationRuler — 标尺
  • STextAnimationDisappearingBar — 拖拽渐隐消息栏
  • STextAnimationPreviewWidget / STextAnimationPreviewList / STextAnimationList — 预览控件与列表

预览系统

ETexturgePreviewSource

enum class ETexturgePreviewSource : uint8
{
    None,           // 无预览 — 显示静止文本(恒等状态)
    StagePreview,   // 独立时钟循环播放入场/默认/出场阶段
    GlyphAnimation  // Sequencer 播放头驱动的字形动画预览
};

FPreviewSourceMediator

预览源仲裁器,管理三种预览模式与烘焙缓存。

方法说明
RequestSource(ETexturgePreviewSource, EAnimationStage = None, UGlyphAnimation* = nullptr)请求切换预览源
RegisterObserver / UnregisterObserver预览源变更观察者(FOnPreviewSourceChanged 四参委托)
GetActiveSource() / GetSelectedStage() / GetCurrentAnimation()状态查询
IsStagePreviewActive() / IsGlyphAnimationActive()快捷判断
GetBakeCache() / InvalidateBakeCache() / InvalidateBakeStageCache()烘焙缓存管理
SetActiveOverrides(...) / SetActiveVectorOverrides / SetActiveColorOverrides / SetActiveVector2DOverrides预览参数覆盖注入
TickPreview(View, Config, BP, Sequencer)每帧推进预览(缓存命中 / 未命中检查 → 烘焙 → 求值 → 渲染)

缓存机制FTexturgePreviewBakeCache 分别缓存 BakeAllStages(StagePreview 用)与 BakeStageWithCurves(GlyphAnimation 用)的结果,以 TextFingerprint + BlueprintFingerprint 为键。

UTexturgePreviewSceneConfig

预览场景配置(持久化到 EditorPerProjectUserSettings),设计器视口的全部预览参数:

分组字段(节选)默认值
预览文本PreviewText"Hello Texturge"
预览视口PreviewWidth / PreviewHeight / bPreviewSizeToContent500 / 200 / false
颜色与外观PreviewColorAndOpacity / PreviewMinDesiredWidthWhite / 0
字体PreviewFont / PreviewLetterSpacing / PreviewFontMaterial— / 0 / —
轮廓PreviewOutlineSize / PreviewOutlineColor0 / Transparent
阴影PreviewShadowOffset / PreviewShadowColorAndOpacityZero / Transparent
对齐与变换PreviewTextTransformPolicy / PreviewJustificationNone / Left
换行bPreviewAutoWrapText / PreviewWrapTextAt / PreviewWrappingPolicyfalse / 0 / DefaultWrapping
行高与边距PreviewLineHeightPercentage / PreviewMargin1.0 / —
渲染PreviewClipping / bPreviewPixelSnapping / PreviewRenderOpacity / PreviewStrikeBrushInherit / true / 1.0 / —
溢出与流方向PreviewFlowDirection / PreviewTextOverflowPolicyInherit / Clip

Sequencer 集成

FGlyphAnimationTrackEditor(私有类)扩展 FMovieSceneTrackEditor,将 UGlyphAnimation 内部的 UMovieSceneGlyphAnimationTrack 注册到 Sequencer:

  • 每个轨道包含多个 UMovieSceneGlyphAnimationSection(子轨道),每个 Section 对应一条类型化子轨道(FTextAnimationSubTrackData
  • 子轨道按轨道类型映射 1~4 条 FMovieSceneFloatChannel(Float→1、Vector2D→2、Color→4)
  • 支持标准关键帧操作(添加/删除/移动/插值曲线调节)与多行显示(SupportsMultipleRows
  • OnSubTrackAddedToSequencer(ETextAnimationTrackType) 静态回调将新子轨道同步回蓝图

工具栏与命令

FTexturgeEditorCommands 注册编辑器命令:

命令说明
OpenPreviewWindow打开预览窗口
ToggleDashedOutline切换虚线轮廓显示
ToggleGridSnap切换网格吸附
ToggleFontMetrics切换字体度量叠加
ZoomToFit缩放至适应
images/editor-tools.png — Texturge 动画蓝图编辑器全景截图:Designer 模式布局,左侧动画列表面板,中央设计器视口显示预览文本 "Hello Texturge" 的逐字动画,右侧 Sequencer 时间轴与详情面板,顶部工具栏含缩放/网格/吸附/字体度量控件 — Texturge animation blueprint editor overview: Designer mode layout with animation list panel on the left, designer viewport showing "Hello Texturge" per-glyph animation in the center, Sequencer timeline and details panel on the right, toolbar with zoom/grid/snap/font-metric controls on top