Anchor & Hint Tags

Use tags to semantically steer where things spawn without hard-coding positions. Tags live in two places:

  • WaveSpawnPoint.AnchorTags – tags that describe what kind of placement the wave wants (e.g., "Flank", "Ambush").

  • EnemySpawnHintPoint.tags – tags that describe what kind of spot this hint represents.

When a wave fires, the system tries to pick hint points whose tags overlap with the anchor’s tags.


How matching works

  • Scope: Tag matching is only used by wave spawns (because they have an anchor). Global/Region spawns don’t supply tags, so hints are chosen by distance/LOS/etc. only.

  • Logic: It’s an OR match. If any tag on the anchor is equal to any tag on the hint, it’s a match.

  • Case/spacing: Exact string equality, case-sensitive, no trimming. "Flank""flank" and "HighGround""High Ground".

  • Pass order:

    1. Prefer tag-matched hints inside the search radius.

    2. If none qualify, try any eligible hint in range.

    3. If still none and Hint-Only is off, fall back to sampler. If Hint-Only is on, the spawn is skipped.

  • Empty tags:

    • Anchor has no tags → the “prefer tag” pass is skipped (any hint may be used).

    • Hint has no tags → it won’t match the tag-preferred pass, but can still be used in the “any eligible” pass.


Authoring guidelines

  • Define a small vocabulary and stick to it (e.g., Flank, Ambush, HighGround, Close, Far, Street, Cave).

  • Be consistent in casing and spelling. Consider using constants in your team docs.

  • Tag intent, not location. A point behind cover might be Flank, a balcony might be HighGround.

  • Generic anchors: If a wave doesn’t care, leave Anchor Tags empty so any suitable hint can be used.

  • Specific anchors: Add 1–3 tags max. Too many tags can unintentionally exclude hints.


Where tags are used

  • Wave spawns: Anchor → preferred hint tags → placement.

  • Global & Region spawns: Tags are currently not used (no anchor context). Hints are still considered (if enabled) by distance/LOS/NavMesh rules.


Example tag sets

  • Flank engagement:

    • Anchor: ["Flank"]

    • Hints: mark spots behind cover with Flank.

  • Ambush from alleys:

    • Anchor: ["Ambush","Close"]

    • Hints: tight corners/doorways tagged Ambush, nearby ones also Close.

  • Ranged pressure from above:

    • Anchor: ["HighGround","Far"]

    • Hints: balconies and rooftops with HighGround; distant roofs add Far.

  • Biome-aware waves:

    • Anchor: ["Cave"]

    • Hints: cave interiors tagged Cave so waves in that area bias correctly.


Troubleshooting

  • “No suitable hint found” while Hint-Only is ON:

    • Check spelling/case of tags on anchors and hints.

    • Ensure the hint is within the wave’s search radius (anchor range + padding).

    • Verify Min/Max Player Distance on the hint vs. player position.

    • If needed, enable Ignore Spawner’s Global Min Range in Spawn Hint Settings.

    • Turn on debug logs in settings to see which rule filtered out a hint.

  • Hints used but not the tagged ones:

    • Anchor tags empty → no preference.

    • Tags don’t match exactly → fix casing/spacing.

    • Tag-matched hints failed other checks (LOS/NavMesh/reservations) → inspect logs/Gizmos.


Quick checklist

  • Anchor and hint tags spelled the same? (case-sensitive)

  • Anchor range + padding reaches the hints?

  • Hint’s min/max player distance compatible with your current player position?

  • Hint-Only vs. fallback behavior set as intended?

  • Debug logs enabled during setup to verify match decisions?

Last updated