Frequently Asked Questions

Installation & Setup

The plugin doesn’t appear after installation?

Check the following:

  1. The Texturge folder is in your project’s Plugins/ directory (not the engine Plugins directory)
  2. The plugin is enabled under Edit > Plugins (search for “Texturge”)
  3. You’ve restarted Unreal Editor
  4. Your engine version is ≥ 5.7

How do I create a Texturge asset in the Content Browser?

Right-click → Texturge → Text Animation Blueprint. If this option doesn’t appear, verify the plugin is properly enabled.

Animation Authoring

Why isn’t my animation playing?

Common troubleshooting steps:

  1. Check that bAutoPlay is true (or Play() was manually called)
  2. Confirm TextAnimationBlueprint (or AnimationData) is properly assigned
  3. Confirm at least one track has bEnabled = true and Duration > 0
  4. Confirm the text is non-empty (IsAnimating() silently returns false when text is empty)

The animation finished in a single frame?

Check timing mode and duration settings:

  • If using TotalDuration mode, confirm TotalTextDuration has a reasonable value (e.g., 2.0 seconds, not 0.01)
  • If using PerCharacterDuration mode, confirm Duration is reasonable (e.g., 0.1 seconds per character)
  • Check whether CharacterDelayFrames and ApplicationMode settings cause all characters to complete simultaneously

Characters are revealed but I don’t see any animation effect?

Possible causes:

  • BlendMode set to Override, covering previous track effects
  • TrackWeight set to 0 (track not taking effect)
  • Keyframe value is the default (e.g., Color = White produces no visible tint)
  • ApplicationMode set to Random with a very low RandomProbability

Rich Text

Text inside animation tags has no animation?

Check the Entries array in UTextAnimationDataAsset:

  1. Confirm TagName matches the tag name in the rich text exactly (case-sensitive)
  2. Confirm the corresponding Type animation blueprint asset is valid and contains at least one track
  3. The <anim id="TagName"> format (id attribute matching) is recommended over bare tag names

Standard rich text style tags aren’t working?

Texturge’s FRenderTreeBuilder passes non-animation tags through as-is. Confirm:

  • A Style Set is configured in the URichTextBlock properties
  • Style tag names match the RowName in the RichTextStyleSheet data table exactly (case-sensitive)
  • Animation tags and style tags are not nested in conflicting ways

Decorator position is off?

FRichTextMarshaller uses FDecoratorProxyRun for decorators to prevent plain text index disruption. If positions are offset:

  • Confirm the decorator class is registered in URichTextBlock’s DecoratorClasses
  • Check if decorators are nested inside animation tags (not recommended)

Localization

Animation position is wrong after language switch?

Ensure you’re using the semantic anchor mechanism in your localization workflow:

  1. Define FSemanticAnchor for animation effect positions in the source language text
  2. Configure matching strategy in ULocalizationSubsystem::RelocateAnchors()
  3. If using LCS approximate matching, check that ContextualSnippet is long enough (at least 5 words recommended) to provide sufficient context

How should I manage animations for multilingual projects?

Recommended workflow:

  1. Maintain a separate UTextAnimationBlueprint per language (tracks can be reused, only adjust text-related parameters)
  2. Use the ULocalizationSubsystem::OnLanguageChanged event to trigger animation asset switching
  3. Update the animation blueprint reference in UAnimatedTextBlock’s OnLanguageChanged callback

CJK Text

CJK text reveal doesn’t work correctly?

Texturge includes comprehensive CJK character detection (Texturge::Unicode namespace). If you encounter issues:

  • Confirm text encoding is correct (UTF-8/UTF-16)
  • Check that CharBreakIterator is correctly traversing Unicode character boundaries
  • CJK characters count as 1 per ideograph; surrogate pairs (e.g., emoji) count correctly as 1

Performance

Lag with many characters or high-frequency Ticks?

Optimization suggestions:

  • Reduce the number of simultaneously animating widgets
  • Use SkipToEnd() for non-critical text to display instantly rather than character-by-character
  • Lower CPS (characters per second) to reduce sound queue pressure
  • Reduce UEventSoundComponent::MaxSoundsPerTick (default 8)
  • The animator’s built-in MaxAdvanceFramesPerTick = 5 debounce protection ensures a single Tick can’t skip too many frames

How much slower is the rich text path vs. the plain text path?

The rich text path adds overhead from:

  1. FTagParser parsing (single-pass O(n), negligible)
  2. FRenderTreeBuilder construction (O(n), negligible)
  3. Multiple UTextAnimInstance compilations, one per layer (primary overhead)

Recommendation: If the entire text block uses the same animation effect, prefer the plain text path (UAnimatedTextBlock); use the rich text path only when different text segments need different animations.