Data-driven combat hit detection for melee swings, area attacks, hitscan and projectiles — one profile asset, every attack shape, GAS target data out.
GAS · Combat · Unreal Engine 5
Author the attack once. It hits correctly everywhere.
Given a shape, a moment in time and a filter policy — which actors were hit? CrimsonHitDetection answers that identically for a sword swing, a shockwave, a hitscan shot and a projectile, so an attack becomes a data asset instead of a hand-rolled swept trace with its own already-hit set, team check and authority gate in every ability.
Why CrimsonHitDetection
Built on Epic's Gameplay Targeting System, server-authoritative by construction, and deliberately report-only.
One asset per attack
A UCrimsonHitProfile holds the targeting preset, dedup policy, per-window and per-query target caps, query rate and impact cue tag. Reuse it across every ability that should hit the same way — and get a Data Validation error if the preset can never resolve anything.
Sweeps that don't miss
A weapon tip can travel several metres between frames, and a single overlap at its new position misses everything it passed through. Both Crimson selection tasks sweep from the previous query, sub-stepping when the distance exceeds the shape radius — so dropping to 30 Hz halves the trace cost almost for free.
Composable filters, not hardcoded rules
Affiliation, actor class, angle, line of sight, target tag query, max distance, require-ASC and require-hurtbox — eight filter tasks plus a sort, composing freely with Epic's own. Geometry is a selection task; validity is a filter task.
No client-initiated RPCs
Shape queries, filtering, dedup and target limits all run server only, so there is no trust boundary to police and no _Validate surface. A separate unreliable multicast carries cosmetic impacts, so effects still land promptly on every machine that can see the fight.
Pooled, replicated projectiles
ACrimsonProjectile handles pierce counting, homing, max range and finite lifetimes, flies simulated locally from replicated launch state, and implements ICrimsonPoolable — so it recycles through CrimsonObjectPool with no glue code on either side.
The stale-bone trap, fixed for you
A server renders almost nothing, and only Always Tick Pose And Refresh Bones refreshes bones off-screen. Without that, every socket answers from the reference pose — the swing sweeps a T-pose off to one side and connects with nothing. It looks exactly like a replication bug and isn't. The plugin holds the attacker's mesh at that setting while any window is open, then restores it.
A closer look
Windows, not frames
A hit window is a period during which queries run, opened by an animation notify or an ability task. It owns what makes a swing behave like one attack instead of a series of independent frames: the already-hit set, the target budget, and the positions the sweep interpolates from. Pick Once Per Window for a swing, Once Per Interval for burning ground, Every Tick when you accumulate yourself. Every window carries a safety timeout, because an interrupted montage can skip its end event.
Head shots, without damage maths
Name a zone with a physical material on a physics-asset body, or map bones to zones with a hurtbox component whose lookup walks up parents. Each impact reports a zone tag — Body, Head, Limb, Weakpoint, Armoured — and the plugin assigns no meaning to any of them. What a head shot is worth stays your decision.
Vary an attack without a second asset
Every request gets its own copy of the preset, so the ability task nodes expose the values you marked on your own selection tasks as pins — a skill rank that sets radius, a charged attack that grows while held. For what pins cannot reach there's Shape Scale, a uniform multiplier that also works from animation notifies.
Technical details
- Engine
- UE 5.8
- Platforms
- Windows, Mac, Linux
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- Yes
- Dependencies
- CrimsonCommon, GameplayAbilities, TargetingSystem, GameplayTags, PhysicsCore, AIModule
- Last updated
- July 2026
Frequently asked questions
Do I need the Gameplay Ability System?
FGameplayAbilityTargetDataHandle and the window drivers are UAbilityTask nodes. There is no non-GAS path, so if your project doesn't use GAS this plugin isn't usable as-is.Do I need C++ to use it?
Blueprintable. A couple of keyed-window entry points are C++-only, for callers like an animation notify that cannot hold a handle, and you won't call them directly.Does it apply damage?
FCrimsonHitReport and stops — it never builds or applies a UGameplayEffect and never executes a GameplayCue, it just carries the cue tag for you to fire. Effect specs get modified between construction and application by stat systems, augments and buffs; applying them from inside a detection system would silently bypass all of it and double-fire cues your own effect already carries.Does it work in multiplayer?
Do I have to enable the Gameplay Targeting System myself?
.uplugin, so enabling CrimsonHitDetection enables it too — even though Epic ships it disabled by default. It will show as enabled in Edit → Plugins without you having ticked it.Does it depend on other Crimson plugins?
IGenericTeamAgentInterface, so it works with CrimsonTeams or any team system that implements it — but read How-To: Filter By Team before shipping either way, because unresolved team data reads as Neutral and the filter allows Neutral by default. The failure mode is hitting your own allies, not an error.One profile asset. Every attack shape.
Melee swings, shockwaves, hitscan shots and projectiles resolved by the same system, on the server, with the arc measured from when the swing started. The Quick Start walks a swung weapon end to end.
Pricing
CrimsonHitDetection is sold on Fab under Epic’s two standard licenses — both include the full plugin, source, and updates.
Completes your setup
Built on the free CrimsonCommon foundation, so it pairs cleanly with the rest of the suite:
A full Gameplay Ability System layer for UE5.
- Custom ASC & Abilities
- Slot-Based Augments
- Modifiers & Phases
- Graph-Based Combos
Motion warping that lands attacks at striking distance.
- Authored Reach Band
- Capsule-Aware Standoff
- Turn-Speed Cap
- Compile-Time Validation
- Server-Validated Warps
Tag-based teams & factions with dynamic attitude.
- Tag-Based Teams
- Dynamic AI Re-Aggro
- GAS Target Filtering
- Team Colors
- Multiplayer Dev Tools
Actor pooling with an explicit acquire and release API.
- Replicated-Safe Pooling
- Frame-Budgeted Spawns
- Per-Class Capacity
- Bypass Switch