Weather Sounds in Unreal Engine 5: Rain, Wind and Thunder That Follow the Weather

Table of Contents

Works in Unreal Engine 5.0 to 5.8. Updated November 2026.

Quick answer: give each layer its own looping Audio Component and fade Set Volume Multiplier toward the weather strength. Lower the Low Pass Filter Frequency when a trace up hits a roof, and play thunder after distance ÷ 343 m/s.

Step 1: Get looping sounds

You need seamless loops: light rain, heavy rain, wind and, if you have snow, a soft wind bed. Free sources include CC0 sounds on Freesound and the yearly Sonniss GDC bundle. Check each licence. Our post on music and sound for indie games on a budget covers where to look.

Open each Sound Wave and tick Looping. A loop that isn’t marked looping stops once and stays silent.

Step 2: One audio component per layer

  1. Make an Actor Blueprint BP_WeatherAudio and place it in the level.
  2. Add an Audio Component for each layer. Set its sound, untick Auto Activate, and make sure the sound has no attenuation and Allow Spatialization is off, so the layer plays in 2D around the player.
  3. Add a float variable per layer for its current volume, for example RainVolume.

Step 3: Fade with the weather

On Event Tick, for each layer:

				
					RainVolume = FInterp To Constant(RainVolume, RainIntensity, DeltaSeconds, 0.5)
RainAudio -> Set Volume Multiplier(RainVolume)
If RainVolume > 0.01 and not playing -> Play
If RainVolume < 0.005 and playing    -> Stop
				
			

An interp speed of 0.5 means a full fade takes two seconds. The gap between 0.01 and 0.005 stops a quiet layer from flickering on and off.

For a richer storm, use two rain layers. Drive light rain with a curve that peaks at medium intensity, and heavy rain with one that starts at medium. Or use one MetaSound with a float input such as Intensity that crossfades inside, and send the value with Set Float Parameter.

Step 4: Muffle the rain indoors

  1. On a timer (every 0.2 s is plenty), run Line Trace By Channel from the camera straight up about 6000 cm on Visibility.
  2. Smooth the result into a float SkyOpen: 1 when nothing is hit, 0 when something is.
  3. On each outdoor layer, call Set Low Pass Filter Enabled (true), then Set Low Pass Filter Frequency = Lerp(900, 20000, SkyOpen).

At 900 Hz the rain sounds like it’s on the other side of a wall. One straight trace misses gaps such as porches. Several traces in a small cone give a smoother value.

Add a “roof rain” layer. Use a patter-on-a-roof loop driven by RainIntensity × (1 − SkyOpen), with no low-pass. It gets louder exactly as the outside rain gets muffled, and sells the shelter.

Step 5: Thunder that arrives late

When lightning strikes, take the distance d in metres from the camera to the bolt:

ValueFormulaExample at 1.7 km
Delayd ÷ 3435 seconds
Volumemax(1000 ÷ d, 0.15)0.59
SoundNear clap under 2 km, distant rumble beyondNear clap

Use a sharp crack for close strikes and a long rumble for far ones. One sound for both sounds fake.

A Delay node ignores a second call while it’s waiting, so two quick strikes would lose a thunderclap. Spawn a small actor per strike that waits, plays and destroys itself.

We do this in our Any Weather plugin.

FAQ

Should the music change with the weather too?

It helps. Switch stems or intensity when a storm starts, and use Quartz so the change lands on the beat.

Do weather sounds need to replicate?

No. Each player works them out from the shared weather state and their own camera.

Sound Cue or MetaSound?

Either works for simple loops. MetaSounds are better when one input should crossfade several layers.

Related tutorials