How-To: Position Pops

Goal: decide where a pop appears - over the target, under it, or somewhere else entirely.

Two independent controls do this, and it is worth keeping them apart. The target component sets the anchor point on an actor (which bone, how high). A placement decides which anchor a style uses at all, and can ignore the actor entirely in favour of a spot on the screen.

Prerequisites
You completed Quick Start.

1. Move the anchor point on the actor (optional)

Without a UCrimsonCombatTextTargetComponent, pops anchor 100 cm above the actor's root. Add one to pick a socket or a different offset. A valid socket wins over the offset, and because the socket moves with the animation the offset is deliberately ignored in that case.

Character Blueprint -> Add Component -> Crimson Combat Text Target Component -> set Socket Name (e.g. head) or Relative Offset.

On your character Blueprint: Add Component -> Crimson Combat Text Target Component, then in its details set either Socket Name (for example head) or Relative Offset.

Verify
Set SocketName to head on a character - its pops now spawn at the head bone instead of 100 cm above the root. Clear it and they return to the offset.

2. Create a placement set

A placement set is the library of named places text is allowed to appear. Right-click in the Content Browser -> Crimson -> Combat Text -> Placement Set. A new asset seeds itself with five editable built-in rows:

Placement idWhat it does
CrimsonCombatText.Placement.TargetOver the target, using its target component. Identical to authoring no placement at all
CrimsonCombatText.Placement.TargetBelowSame anchor, offset 90 layout units down
CrimsonCombatText.Placement.ScreenIncomingFixed HUD area left of center
CrimsonCombatText.Placement.ScreenOutgoingFixed HUD area right of center
CrimsonCombatText.Placement.ScreenNotificationFixed HUD area above center, for words rather than numbers

Assign the asset to your registry's Placement Set property. The built-in rows are a starting point, not an opinion - retune them, delete them, or add your own. Add Built-In Placements on the asset re-adds any that are missing without touching what you authored.

Verify
The new asset opens with five rows under Placements, each with its own Placement Id.

3. Route a style to a placement

On any Styles row in your registry, set Placement Preset to a placement id. Leave it unset and that style anchors over the target - which is why an existing project keeps working after you add a placement set.

Placement Offset on the same row nudges that style relative to others sharing the placement, in layout units. Slate's Y axis grows downward, so a positive Y reads lower on screen.

Verify
Open the dev tools (Tools -> Crimson -> Combat Text), pick your style's tags on the Resolver tab, and read the Placement: line. It shows the resolved id, or (default - over target).

4. Recipe: damage over the enemy, healing under it

This is the whole reason placements route by tag. Two rows, no code:

Registry Styles rowPlacement Preset
DamageCrimsonCombatText.Placement.Target
HealCrimsonCombatText.Placement.TargetBelow

Both anchor to the same point on the actor. TargetBelow simply carries a downward Screen Offset, so healing reads under the enemy while damage reads over it.

Verify
Damage a healing target in PIE. The two numbers separate vertically instead of overlapping.

5. Follow the target, or pin to the hit

Whether text chases a moving enemy is a property of the placement, not the style: bFollowTarget on UCrimsonCombatTextPlacement_WorldActor. On, a fleeing enemy carries its numbers. Off, they stay where the hit landed, which some fast-movement games prefer for readability.

Two placement rows can point at the same class and disagree about this, so you can have damage follow while critical hits stay put.

Off-screen targets
By default a pop hides once its anchor leaves the view. Tick bClampToViewportEdge on the placement to pin it to the edge of the screen instead - it handles anchors behind the camera correctly, which a plain projection cannot express.

See also

  • How-To: Show Pops on the HUD or a Health Bar - fixed screen areas and widget anchors.
  • How-To: Write Your Own Placement - when the built-ins are not enough.
  • Concept: Style Resolution, Motion & Rendering - where placement sits in the resolution order.
  • Concept: Event Flow & Replication - why the event still carries a world location.