What @VillagerFilms said.
Use Anim Notifies on each foot plant in locomotion animation sequences to trigger an event.
Have the event do a trace down from 20cm above the foot that planted.
get bone location (foot_l) add 20cm to Z (trace start), subtract 200cm from start (trace end)
From the Hit result get the physical material → Surface type to determine specific sound. (grass, concrete, wood etc).
You can then run conditional logic prior to setting the sound and playing it. You should have a way to determine if your character is in water. For simple water (shallow, cant swim in) like sheet plane over a creek/ditch. You can add an Actor tag (Water). Then get that tag from the hit result.
Hit Actor -> Actor Tags -> Length > 0 -> Get copy (0) -> == water etc
If you’re in swimmable water your CMC movement mode would be “Swimming” which you can check against.