Feel Profiles & Dramatic Intensity
Feel Profiles and Dramatic Intensity let you adjust game feel globally — scaling everything up for cinematic moments, toning it down for menus, or making every successive hit feel heavier.
Feel Profiles
A UERP_FeelProfile is a UDataAsset that configures global response behavior.
Creating a Feel Profile
Content Browser → right-click → Miscellaneous → Data Asset → UERP_FeelProfile
Properties
| Property | Type | Description |
|---|---|---|
GlobalIntensityScale | float | Multiplies all response intensities (default 1.0) |
DramaticIntensityCurve | UCurveFloat | Maps normalized DI [0..1] to an intensity multiplier. X=DI, Y=multiplier |
TimeDilationBias | float | Reserved for future time-dilation integration |
bSuppressParticles | bool | Silences all ParticleEffect handlers |
bSuppressAudio | bool | Silences all SoundEffect and ControllerRumble handlers |
bSuppressCameraEffects | bool | Silences CameraShake and CameraFOVPulse handlers |
bSuppressPostProcess | bool | Silences ChromaticAberration, BloomPulse, DepthBlur, ColorGrade handlers |
ForceMutedChannels | FGameplayTagContainer | Channels silenced regardless of per-channel settings |
MinQualityLevel | ERP_EImpactQualityLevel | Handlers below this quality level are skipped |
Setting the Active Profile
// Blueprint: Set Feel Profile node
// C++:
UERP_ImpactStatics::SetFeelProfile(this, MyFeelProfile);
// Clear the active profile (revert to defaults):
UERP_ImpactStatics::SetFeelProfile(this, nullptr);
Example Profiles
Cinematic (boss fight)
GlobalIntensityScale: 1.5DramaticIntensityCurve: Exponential — DI amplifies intensity aggressively- All suppress flags: false
Menu / Pause
bSuppressAudio: truebSuppressCameraEffects: truebSuppressParticles: trueGlobalIntensityScale: 0.0
Performance / Low Quality
bSuppressParticles: truebSuppressPostProcess: trueGlobalIntensityScale: 0.7
Dramatic Intensity
How It Works
Each PlayResponse call accumulates DI on the target actor:
NewDI = CurrentDI + (Context.Magnitude × Asset.DramaticContribution)
DI decays over time automatically in the subsystem tick. The decay is linear — DI returns to 0 when no responses are played.
Normalized DI [0..1] is evaluated against the Feel Profile’s DramaticIntensityCurve to produce an intensity multiplier applied to every subsequent response on that actor.
Default Behavior (No Feel Profile)
Without a Feel Profile, the default DI multiplier is:
Multiplier = 1.0 + NormalizedDI
At DI=0: 1× intensity. At DI=1: 2× intensity.
Designing a DI Curve
The DramaticIntensityCurve is a UCurveFloat:
- X axis: Normalized DI
[0..1] - Y axis: Intensity multiplier
Common shapes:
- Linear (0→1 to 1→2): Gradual escalation
- Ease-in (flat then steep): Starts neutral, explodes at high DI
- S-curve: Gentle start and end, aggressive middle
- Step (1.0 until 0.7, then 2.0): Binary dramatic boost
Querying DI
// Normalized [0..1]:
float DI = UERP_ImpactStatics::GetDramaticIntensity(this, TargetActor);
// Reset:
UERP_ImpactStatics::ResetDramaticIntensity(this, TargetActor);
From Blueprint: Get Dramatic Intensity and Reset Dramatic Intensity nodes.
Per-Asset DI Contribution
Asset.DramaticContribution controls how much a response contributes to DI:
0.0— no DI accumulation (decorative responses: footsteps, ambient effects)0.5— moderate contribution (default)1.0— full contribution (heavy hits, explosions)
Set it to 0.0 for responses you don’t want to affect the DI curve (e.g., footstep sounds, ambient particles).
Interaction with Channels
Feel Profile ForceMutedChannels silences channels regardless of per-channel state set via MuteChannel. Use this for global overrides (e.g., suppress all Audio.Impact during cutscenes via a Cinematic feel profile).
Next Steps
Configure grouping and routing in Channel System.
See all handler properties in Handler Reference.