CrimsonHitDetection
Gameplay Ability System projects only
Every hit is reported as a
FGameplayAbilityTargetDataHandle, and the window drivers are UAbilityTask nodes. There is no non-GAS path. If your project does not use GAS, this plugin is not usable as-is.Built on the Gameplay Targeting System
All geometry and target filtering is authored as a
You do not need to enable it yourself. It is declared as a dependency in
UTargetingPreset, which lives in Epic's Gameplay Targeting System plugin (TargetingSystem).You do not need to enable it yourself. It is declared as a dependency in
CrimsonHitDetection.uplugin, so enabling this plugin enables it too - even though it ships disabled by default. It will show as enabled in Edit -> Plugins without you having ticked it.CrimsonHitDetection answers one question: given a shape, a moment in time, and a filter policy, which actors were hit? It answers it identically for a sword swing, a shockwave, a hitscan shot and a projectile, so an attack is authored once as a data asset instead of hand-rolling a swept trace, an already-hit set, team filtering and authority gating in every ability.
It reports; it does not apply. The plugin never builds or applies a UGameplayEffect, so your ability keeps full control of effect construction and anything hooked onto it.
What's included
| System | Key types | Purpose |
|---|---|---|
| Profiles | UCrimsonHitProfile | The reusable asset: preset, dedup policy, target limits, query rate |
| Runtime | UCrimsonHitDetectionComponent | Opens and closes hit windows, runs queries, reports results |
| Selection | UCrimsonHitSelectionTask_SocketSweep, UCrimsonHitSelectionTask_ActorSweep, UCrimsonHitSelectionTask_Area, UCrimsonHitSelectionTask_Trace | Swept geometry the Targeting System does not ship, plus resizable area and trace shapes |
| Filtering | UCrimsonHitFilterTask_Affiliation, _ActorClass, _Angle, _LineOfSight, _TargetTagQuery, _MaxDistance, _RequireAbilitySystem, _RequireHurtbox | Composable rules for who counts as a valid target |
| Drivers | UCrimsonAbilityTask_HitWindow, UCrimsonAbilityTask_HitQuery, UAnimNotifyState_CrimsonHitWindow, UAnimNotify_CrimsonHitQuery | Ability-driven and animation-driven active frames |
| Projectiles | ACrimsonProjectile, UCrimsonAbilityTask_LaunchProjectile | Replicated, pool-ready projectiles driven by the same profiles |
| Hit zones | UCrimsonHitZonePhysicalMaterial, UCrimsonHurtboxComponent | Naming head shots and weak points, with no damage maths |
| Examples | /CrimsonHitDetection/Examples/ | Worked presets, profiles and a projectile Blueprint to duplicate |
Shipped examples
Tick Settings -> Show Plugin Content to see
Only the melee preset needs editing: its socket names cannot be guessed for your weapon.
/CrimsonHitDetection/Examples/:TP_CrimsonMeleeSweep, TP_CrimsonAreaSphere, TP_CrimsonHitscan, TP_CrimsonProjectileSweep - one preset per attack shape.DA_CrimsonHitProfile_Melee, _Area, _Projectile - profiles wired to those presets.BP_CrimsonProjectile_Example - a projectile ready to fire once you add a mesh.Only the melee preset needs editing: its socket names cannot be guessed for your weapon.
Plugin dependencies
| Group | Name | Why |
|---|---|---|
| Crimson plugins | CrimsonCommon | The CRIMSON_LOG_* macros. Nothing else |
| Engine plugins | GameplayAbilities | Target data output, UAbilityTask bases |
| Engine plugins | TargetingSystem | UTargetingPreset, UTargetingTask, UTargetingSubsystem |
| Engine modules | GameplayTasks | UGameplayTask base under UAbilityTask |
| Engine modules | GameplayTags | Hit zones, context tags, impact cue tags |
| Engine modules | DeveloperSettings | UCrimsonHitDetectionSettings |
| Engine modules | PhysicsCore | UPhysicalMaterial subclassing for hit zones |
| Engine modules | AIModule | FGenericTeamId::GetAttitude for the affiliation filter |
| Engine modules | NetCore | Quantized impact serialization for the cosmetic multicast |
| Engine modules | Projects | Registering the plugin's Config/Tags search path |
No team-system dependency
Affiliation filtering goes through the engine's
If you are NOT using CrimsonTeams, read How-To: Filter By Team before shipping. Unresolved team data reads as Neutral, and the filter allows Neutral by default, so the failure mode is hitting your own allies rather than an error.
IGenericTeamAgentInterface, so it works with any team system that implements it - including CrimsonTeams - without this plugin depending on one.If you are NOT using CrimsonTeams, read How-To: Filter By Team before shipping. Unresolved team data reads as Neutral, and the filter allows Neutral by default, so the failure mode is hitting your own allies rather than an error.
Which path do I choose?
Start here
Building a melee attack? Follow Quick Start - it walks a swung weapon end to end.
Area attack, shockwave or hitscan? Quick Start first, then How-To: Area Attacks and Hitscan.
Projectiles? How-To: Projectiles.
Head shots and weak points? How-To: Hit Zones.
Ranks, modifiers or buffs that change an attack's size or reach? How-To: Vary An Attack's Values.
Not using CrimsonTeams, or attacks are hitting your own side? How-To: Filter By Team - read it before shipping.
Want the model behind hit windows and dedup before writing anything? Concept: Windows, Shapes and Filters.
Area attack, shockwave or hitscan? Quick Start first, then How-To: Area Attacks and Hitscan.
Projectiles? How-To: Projectiles.
Head shots and weak points? How-To: Hit Zones.
Ranks, modifiers or buffs that change an attack's size or reach? How-To: Vary An Attack's Values.
Not using CrimsonTeams, or attacks are hitting your own side? How-To: Filter By Team - read it before shipping.
Want the model behind hit windows and dedup before writing anything? Concept: Windows, Shapes and Filters.