Skip to content

UMageItCombatTextRendererBase

Base Class: UObject

UMageItCombatTextRendererBase is the abstract contract every renderer backend implements. It is Abstract, Blueprintable, and EditInlineNew, so you can write an entirely new rendering backend as a Blueprint or C++ subclass and register it in UMageItCombatTextSettings::RendererRegistry just like the three built-in renderers (UMG, Niagara, Slate).

An instance is created lazily by UMageItCombatTextSubsystem::GetRenderer the first time a FGameplayTag resolves to its class, and lives for the lifetime of the local player.


  • CombatTextSubsystem (ULocalPlayerSubsystem*, BlueprintReadOnly): The owning subsystem, cached during Initialize.
  • PlayerController (APlayerController*, BlueprintReadOnly): The local player’s controller, resolved from CombatTextSubsystem’s ULocalPlayer during Initialize.

void Initialize(ULocalPlayerSubsystem* OwningSubsystem);

Called once, the first time the subsystem lazily creates this renderer. The base implementation caches CombatTextSubsystem and resolves PlayerController. Always call the parent implementation first when overriding.

void RenderDamage(const FMageItCombatTextEvent& EventData);

Called for every event routed to this renderer by AddDamageEvent. The base implementation is a no-op — concrete renderers override this to actually spawn or update visuals.

void Shutdown();

Called when the owning subsystem is deinitialized (see UMageItCombatTextSubsystem::Deinitialize). The base implementation is a no-op — concrete renderers override this to release widgets, Niagara components, or Slate content.


virtual UWorld* GetWorld() const override;

Since renderer instances are plain UObjects (not Actors or Components), GetWorld() is overridden to resolve the world through the renderer’s Outer (the owning subsystem). Returns nullptr for the class default object.