常见问题

安装与设置

插件安装后不显示?

请确认:

  1. Texturge 文件夹位于项目 Plugins/ 目录下(非引擎 Plugins 目录)
  2. 已在 Edit > Plugins 中搜索 “Texturge” 并确认启用
  3. 已重启 Unreal Editor
  4. 引擎版本 ≥ 5.7

如何在 Content Browser 中创建 Texturge 资产?

右键 → Texturge → 文本动画蓝图。若未出现该选项,检查插件是否正确启用。

动画制作

为什么动画不播放?

常见的排查步骤:

  1. 检查控件的 bAutoPlay 是否为 true(或手动调用了 Play()
  2. 确认 TextAnimationBlueprint(或 AnimationData)已正确赋值
  3. 确认轨道中至少有一条 bEnabled = trueDuration > 0
  4. 确认文本非空(IsAnimating() 返回 false 且文本为空时静默跳过)

动画播放了一帧就结束了?

检查时序模式持续时间设置:

  • 若使用 TotalDuration 模式,确认 TotalTextDuration 值合理(如 2.0 秒而非 0.01 秒)
  • 若使用 PerCharacterDuration 模式,确认 Duration 值合理(每字符如 0.1 秒)
  • 检查 CharacterDelayFramesApplicationMode 设置是否导致所有字符无延迟同时完成

字符揭示了但看不到动画效果?

可能原因:

  • 轨道的 BlendMode 设为 Override 导致之前的轨道效果被覆盖
  • TrackWeight 设为 0(轨道不生效)
  • 关键帧值为默认值(如 Color = White 时无染色效果)
  • ApplicationMode 设为 RandomRandomProbability 很低

多格式文本

动画标签内的文本没有动画?

检查 UTextAnimationDataAsset 中的 Entries 数组:

  1. 确认 TagName 与多格式文本中的标签名完全一致(区分大小写)
  2. 确认对应 Type 的动画蓝图资产有效且包含至少一条轨道
  3. 推荐使用 <anim id="TagName"> 格式(id 属性匹配),比裸标签名更可靠

标准多格式文本样式标签不生效?

Texturge 的 FRenderTreeBuilder 对非动画标签保持原样输出。确认:

  • 样式集(Style Set)已在 URichTextBlock 属性中配置
  • 样式标签名与 RichTextStyleSheet 数据表中的 RowName 完全一致(区分大小写)
  • 文本中动画标签和样式标签未嵌套冲突

装饰器(Decorator)位置错乱?

FRichTextMarshaller 对装饰器使用 FDecoratorProxyRun 确保占位符不影响纯文本索引。若出现位置偏移:

  • 确认装饰器类在 URichTextBlockDecoratorClasses 中已注册
  • 检查是否在动画标签内部嵌套了装饰器(不建议)

本地化

语言切换后动画错位?

确保在本地化工作流中使用了语义锚点机制:

  1. 在源语言文本中为动画效果位置定义 FSemanticAnchor
  2. ULocalizationSubsystem::RelocateAnchors() 中配置匹配策略
  3. 若使用 LCS 近似匹配,检查 ContextualSnippet 是否足够长(建议每个片段至少 5 个词)以提供足够的上下文

多语言项目如何管理动画?

推荐工作流:

  1. 每种语言维护独立的 UTextAnimationBlueprint 资产(轨道可复用,仅调整文本相关参数)
  2. 使用 ULocalizationSubsystem::OnLanguageChanged 事件触发动画资产切换
  3. UAnimatedTextBlockOnLanguageChanged 回调中更新动画蓝图引用

CJK 文本

中日韩文本逐字揭示不正常?

Texturge 内置了完整的 CJK 字符检测(Texturge::Unicode 命名空间)。若遇到问题:

  • 确认文本编码正确(UTF-8/UTF-16)
  • 检查 CharBreakIterator 是否能正确遍历 Unicode 字符边界
  • CJK 字符每个表意字计为一个字符,代理对(emoji 等)正确计为 1

性能

大量字符或高频 Tick 时卡顿?

优化建议:

  • 减少同时播放动画的控件数量
  • 对于非关键文本,使用 SkipToEnd() 直接显示而非逐字揭示
  • 降低 CPS(每秒字符数)减少音效队列压力
  • 减小 UEventSoundComponent::MaxSoundsPerTick(默认 8)
  • 动画器内置 MaxAdvanceFramesPerTick = 5 防抖保护,确保单 Tick 不会跳动过多帧

多格式文本路径比纯文本路径慢多少?

多格式文本路径额外开销来自:

  1. FTagParser 解析(单遍 O(n),极小开销)
  2. FRenderTreeBuilder 构建(O(n),忽略不计)
  3. 多层 UTextAnimInstance 各自编译(主开销来源)

建议:若整段文本使用相同动画效果,优先使用纯文本路径(UAnimatedTextBlock);仅在需要不同文本段应用不同动画时使用多格式文本路径。