Events Reference
All FeedbackFX event types - Shake, HitStop, PostProcess, Audio, Haptics
Events Reference
Events are the effects that play when a tag is triggered.
Camera Shake
Class: UAgenticFeedbackFXEvent_Shake
Plays a camera shake via PlayerCameraManager.
| Property | Type | Default | Description |
|---|---|---|---|
ShakeClass | UCameraShakeBase* | - | Camera shake asset to play |
bScaleByMagnitude | bool | true | Scale intensity by context magnitude |
MinScale | float | 0.2 | Minimum scale when magnitude=0 |
MaxScale | float | 1.0 | Maximum scale when magnitude=1 |
PlaySpace | ECameraShakePlaySpace | CameraLocal | Shake coordinate space |
bCancelPreviousShakes | bool | false | Stop existing shakes first |
Usage Tips
- Set
MinScale > 0so even small hits feel impactful - Use
PlaySpace = Worldfor directional shakes based onWorldLocation - Enable
bCancelPreviousShakesfor exclusive shake effects
Hit Stop
Class: UAgenticFeedbackFXEvent_HitStop
Freezes or slows time for impact emphasis.
| Property | Type | Default | Description |
|---|---|---|---|
Mode | EHitStopMode | Fixed | Fixed (freeze) or Curve (gradual recovery) |
Target | EHitStopTarget | LocalVisual | What to slow (see Target Modes) |
Duration | float | 0.1 | Effect duration in seconds |
bScaleDurationByMagnitude | bool | false | Scale duration by magnitude |
MinTimeDilation | float | 0.0 | Minimum time dilation (0 = complete freeze) |
CurveType | EHitStopCurve | Sharp | Recovery curve shape |
Curve Types
| Curve | Behavior |
|---|---|
Sharp | Quick freeze, fast recovery |
Smooth | Gradual slowdown and recovery |
EaseOut | Hold freeze, then ease out |
Bounce | Small bounce before full recovery |
DelayedSnap | Hold freeze, then snap to normal |
Custom | Use CustomRecoveryCurve asset |
Target Modes
| Target | MP Safe | Effect |
|---|---|---|
LocalVisual | Yes | Recommended - Applies to locally controlled actors only |
Global | No | Slows entire world - Single-player only! |
Source | Yes | Slows attacker (if locally controlled) |
Target | Yes | Slows victim (if locally controlled) |
Both | Yes | Slows attacker and victim (if locally controlled) |
Note:
LocalVisualmode automatically uses the controlled pawn when noSourceActororTargetActoris provided in the context.
Multiplayer Behavior
In multiplayer, hit stop is a local visual effect - each player experiences their own hit stops:
- When YOU land a hit → Your screen freezes briefly
- When YOU get hit → Your screen freezes briefly
- Other players → See normal speed gameplay (no desync)
Post Process (Temporary)
Class: UAgenticFeedbackFXEvent_PostProcess
Applies a temporary post-process material effect that auto-fades.
| Property | Type | Default | Description |
|---|---|---|---|
Material | UMaterialInterface* | - | Post-process material to apply |
Duration | float | 0.5 | Effect duration in seconds |
MaxWeight | float | 1.0 | Maximum blend weight |
CurvePreset | EPostProcessCurve | SharpImpact | Weight curve shape |
ScalarParameters | TMap | - | Scalar parameter mapping |
VectorParameters | TMap | - | Vector parameter mapping |
ColorParameters | TMap | - | Color parameter mapping |
Curve Presets
| Preset | Behavior | Use Case |
|---|---|---|
SharpImpact | Quick spike, fast fade | Hit feedback |
BloodSplatter | Instant on, slow fade | Blood/damage overlay |
ScreenFlash | Very quick flash | Critical hits, explosions |
SmoothPulse | Smooth in/out | Ability activation |
LingeringEffect | Quick in, slow fade | Poison, burning |
Custom | Use CustomCurve asset | Full control over timing |
Parameter Sources
FAgenticFXScalarParam allows flexible mapping of material parameters:
| Source | Description |
|---|---|
Fixed | Use a constant value directly |
Magnitude | Use Context.Magnitude * Multiplier |
ContextValue | Use Context.Values[SourceName] * Multiplier |
C++ Examples:
// Fixed value
ScalarParameters.Add("Radius", FAgenticFXScalarParam(50.0f));
// From magnitude
ScalarParameters.Add("Intensity", FAgenticFXScalarParam::FromMagnitude(1.0f));
// From named context value
ScalarParameters.Add("Direction", FAgenticFXScalarParam::FromContextValue("HitAngle", 0.01f));Post Process (Persistent)
Class: UAgenticFeedbackFXEvent_PostProcessPersistent
Applies a persistent post-process effect that stays until removed.
| Property | Type | Default | Description |
|---|---|---|---|
Material | UMaterialInterface* | - | Post-process material to apply |
MaxWeight | float | 1.0 | Maximum blend weight |
FadeInTime | float | 0.5 | Fade-in duration |
FadeOutTime | float | 0.5 | Fade-out duration when removed |
bScaleWeightByMagnitude | bool | false | Scale weight by magnitude |
MinWeight | float | 0.2 | Weight at magnitude 0 |
bEnableCurveLoop | bool | false | Enable pulsing animation |
LoopDuration | float | 1.5 | Duration of one pulse cycle |
Weight Scaling by Magnitude
When bScaleWeightByMagnitude = true, the effect intensity scales with context magnitude:
At 20% health -> magnitude = 0.2 -> subtle vignette
At 5% health -> magnitude = 0.8 -> strong vignetteThis works with the Attribute trigger's bMagnitudeFromAttribute option.
Usage Tips
- For low health: Use with
Attributetrigger, enablebScaleWeightByMagnitude - For poison: Enable
bEnableCurveLoopwithSmoothPulsecurve - Remove with
RemovePostProcessByTag(EventTag)
Audio
Class: UAgenticFeedbackFXEvent_Audio
Plays a sound effect with optional volume/pitch scaling.
| Property | Type | Default | Description |
|---|---|---|---|
Sound | USoundBase* | - | Sound asset to play |
bPlay2D | bool | true | Play as 2D (UI) or 3D (world) sound |
VolumeMultiplier | float | 1.0 | Base volume multiplier |
PitchMultiplier | float | 1.0 | Base pitch multiplier |
PitchVariation | float | 0.0 | Random pitch variation (±value) |
bScaleVolumeByMagnitude | bool | false | Scale volume by context magnitude |
MinVolume | float | 0.3 | Volume at magnitude 0 |
MaxVolume | float | 1.0 | Volume at magnitude 1 |
AttenuationSettings | USoundAttenuation* | - | Attenuation for 3D sounds |
Usage Tips
- Enable
bScaleVolumeByMagnitudefor damage sounds that scale with hit severity - Add
PitchVariation(0.05-0.1) to avoid repetitive sounds - Use
bPlay2D = falsewithAttenuationSettingsfor spatial audio
Haptics
Class: UAgenticFeedbackFXEvent_Haptics
Triggers controller haptics/rumble feedback.
| Property | Type | Default | Description |
|---|---|---|---|
bUseForceFeedbackEffect | bool | false | Use asset vs direct intensity |
ForceFeedbackEffect | UForceFeedbackEffect* | - | Force feedback asset |
LargeMotorIntensity | float | 0.5 | Large motor intensity (0-1) |
SmallMotorIntensity | float | 0.25 | Small motor intensity (0-1) |
Duration | float | 0.2 | Rumble duration in seconds |
bScaleByMagnitude | bool | true | Scale intensity by magnitude |
bLooping | bool | false | Loop the effect (asset only) |
Tag | FName | None | Identifier for stopping later |
Usage Tips
- Use
bUseForceFeedbackEffectfor complex multi-channel patterns - Large motor = deep rumble, Small motor = high-frequency buzz
- Light hits:
LargeMotor = 0.3, SmallMotor = 0.2, Duration = 0.1 - Heavy hits:
LargeMotor = 0.8, SmallMotor = 0.6, Duration = 0.25
Impact Frame
Class: UAgenticFeedbackFXEvent_ImpactFrame
Creates impact emphasis via screen flash or world VFX.
| Property | Type | Default | Description |
|---|---|---|---|
Mode | EImpactFrameMode | ScreenFlash | Screen flash or Niagara VFX |
Screen Flash Mode
Full-screen color overlay (fighting game style).
| Property | Type | Default | Description |
|---|---|---|---|
FlashColor | FLinearColor | White | Color of the flash |
FrameCount | int32 | 1 | Duration in frames (1-10) |
Opacity | float | 1.0 | Base opacity (0-1) |
bScaleOpacityByMagnitude | bool | false | Scale opacity by magnitude |
Niagara Mode
Spawn particle VFX at Context.ImpactTransform.
| Property | Type | Default | Description |
|---|---|---|---|
NiagaraSystem | UNiagaraSystem* | - | Niagara system to spawn |
bAutoDestroy | bool | true | Auto-destroy when finished |
FloatParameters | TMap | - | Float params (fixed, magnitude, or context value) |
VectorParameters | TMap | - | Vector params (world location, impact direction, etc.) |
ColorParameters | TMap | - | Color params (fixed or context value) |
Vector Parameter Sources
| Source | Description |
|---|---|
Fixed | Use a constant vector directly |
WorldLocation | Use Context.WorldLocation * Scale |
ImpactLocation | Use Context.ImpactTransform.GetLocation() * Scale |
ImpactDirection | Use Context.ImpactTransform forward direction |
DirectionToSource | Use direction from target to source actor |
ContextValue | Use Context.VectorValues[SourceName] * Scale |
Passing ImpactTransform
FAgenticFeedbackFXContext Context;
Context.Magnitude = 1.0f;
// From HitResult
Context.ImpactTransform = FTransform(
HitResult.ImpactNormal.Rotation(),
HitResult.ImpactPoint
);
// From socket
Context.ImpactTransform = Mesh->GetSocketTransform("WeaponTip");
Feedback->TriggerFeedbackEvent(Tag, Context);Usage Tips
- Screen flash: Use 1-2 frames for snappy hits, 3+ for dramatic impacts
- Niagara: Use
FloatParameterswithSource: Magnitudefor damage-scaled VFX - Niagara: Use
VectorParameterswithSource: ImpactDirectionfor directional VFX - Combine with HitStop for maximum impact feel
Creating Custom Events
UCLASS(BlueprintType, meta = (DisplayName = "My Custom Effect"))
class UAgenticFeedbackFXEvent_MyEffect : public UAgenticFeedbackFXEvent
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float MyParameter = 1.0f;
virtual void ExecuteEvent_Implementation(
UAgenticFeedbackFXComponent* Component,
const FAgenticFeedbackFXContext& Context) override
{
float ScaledValue = MyParameter * Context.Magnitude;
// Your effect logic here
}
};Register in your config and trigger like any other event.