Channel System
Channels let you route, mute, and scale responses by FGameplayTag category — without touching individual Response Assets.
Overview
Every Response Asset has a Channels property (FGameplayTagContainer). When a response is played:
- If any of its channels are muted → the response is dropped entirely
- If any of its channels have an intensity override → the lowest override is applied
Channels are additive tags on an asset — a response can belong to multiple channels simultaneously.
Example Channel Tags
Design your own hierarchy using the GameplayTag editor:
ElysImpact.Channel.Audio
ElysImpact.Channel.Audio.Impact
ElysImpact.Channel.Visual.Camera
ElysImpact.Channel.Visual.PostProcess
ElysImpact.Channel.Gameplay.Damage
ElysImpact.Channel.UI
Muting Channels
// Blueprint: Mute Channel node
// C++:
UERP_ImpactStatics::MuteChannel(this, FGameplayTag::RequestGameplayTag("ElysImpact.Channel.Audio"));
// Unmute:
UERP_ImpactStatics::UnmuteChannel(this, FGameplayTag::RequestGameplayTag("ElysImpact.Channel.Audio"));
Use cases:
- Mute
Audio.Impactduring cutscenes - Mute
Visual.Cameraduring menus - Mute
Gameplay.Damageduring tutorial
Per-Channel Intensity
Scale the intensity of an entire channel without muting it:
// Halve all camera effect responses:
UERP_ImpactStatics::SetChannelIntensity(this, CameraChannel, 0.5f);
// Restore:
UERP_ImpactStatics::SetChannelIntensity(this, CameraChannel, 1.0f);
When a response asset belongs to multiple channels, the lowest channel intensity wins.
Use cases:
Visual.PostProcess→ 0.3 on low graphics settingsAudio.Impact→ 0.5 when background music is loudVisual.Camera→ 0.0 for players with camera shake accessibility preference
Global Intensity
Set the intensity multiplier for all responses simultaneously:
// Blueprint: Set Global Intensity node
UERP_ImpactStatics::SetGlobalIntensity(this, 0.5f); // halve everything
UERP_ImpactStatics::SetGlobalIntensity(this, 1.0f); // restore
Per-Component Channel Filtering
UERP_ImpactComponent has a MutedChannels property. Any response played through the component automatically filters out the specified channels — useful for actors that should never trigger certain effects regardless of what asset is used.
// In C++, add channels to mute at BeginPlay:
ImpactComponent->MutedChannels.AddTag(AudioChannel);
Interaction with Feel Profile
The active UERP_FeelProfile::ForceMutedChannels adds to the global muted set — any channel listed there is silenced regardless of per-channel state. This is the correct way to apply a global suppression from a profile (e.g., a Cinematic profile that silences all audio responses).
Best Practices
- Design your channel tag hierarchy before building assets — changing tags later requires updating all assets
- Use
ElysImpact.Channel.*as your root to keep tags organized - Prefer channel muting over deleting/disabling individual handlers for runtime overrides
- Use
SetChannelIntensity(Channel, 0.0)instead ofMuteChannelwhen you want responses to “exist but be silent” (e.g., so they still accumulate DI)