Quick answer: Assign an Attenuation Settings asset to the sound (or AudioComponent) with Spatialization enabled, and play it at a world location — not via a 2D play node.

An ambient machine sound plays at full volume everywhere, with no stereo positioning. No attenuation asset is assigned, so it’s a flat 2D sound.

Create Attenuation Settings

Content Browser → Sounds → Sound Attenuation. Configure:

Assign It

On the SoundCue/MetaSound or the AudioComponent, set Attenuation Settings to your asset. Without it, the sound is unattenuated 2D.

Play at a Location

UGameplayStatics::SpawnSoundAtLocation(World, Sound, Location, FRotator::ZeroRotator, 1.f, 1.f, 0.f, AttenuationSettings);

Or use SpawnSoundAttached for moving sources. PlaySound2D deliberately ignores attenuation — don’t use it for world sounds.

Listener Position

Spatialization is relative to the audio listener (usually the camera/player). If your listener isn’t where you think, positioning will be wrong — check SetAudioListenerOverride if you customized it.

Verifying

Walk around the machine. Volume falls off with distance; stereo pan tracks direction. Occlusion (if enabled) muffles it behind walls.

“No attenuation asset = flat 2D. Assign one with Spatialization on and play at a location.”

Build a small library of reusable Attenuation assets — ‘SmallProp’, ‘Ambient’, ‘Voice’ — instead of per-sound configs.