How to trigger play sound for multiple collisions

I have a Niagara particle system simulating ejected shell casings that bounce a few times before settling on the ground. I’m using the Play Audio module (following the official Play_Sound_on_Collision example from Content Examples) to play an impact sound on collision.

The sound correctly plays on the first bounce. The problem is subsequent bounces don’t trigger a new sound, and if I uncheck “Play Once,” the sound fires continuously/infinitely instead - which suggests the trigger condition is evaluating “is this particle currently in contact” (true every frame while resting) rather than “did a new discrete collision just occur this frame.”

I want to trigger sound per each genuine bounce (however many times the particle actually bounces), with silence during the resting phase afterward — not continuous firing, and not limited to just the first impact.

Is there a way to detect multiple collisions using the Play Audio module’s trigger conditions? Or is there another way to do this?

Hello there @celestia!

You are correct, that’s exactly how “Play Once" works, it will trigger only one time, then never again. And if you disable it, the particle will read as being in permanent contact, thus looping the sound forever.

In order to play the sound per bounce, you will need to setup a logic using collision events, rather than using the “Play Audio” module only. It’s a bit more complex, but it should give you the result you are looking for. Should look something like this:

  • For your shell’s emitter, under Collision, enable “Generate Collision Event”

  • Create a second emitter, to be used as en event handler, and set it to “Receive Collision Event”

  • Check the emitter’s lifecycle and execution mode accordingly, so the vent is fired only once per event, and not continuously

  • Setup the Play Audio module inside the Event Handler

You can also check UE’s related docs, and the video guide below, which covers a very similar scenario (the example uses UE4, but the logic should remain quite similar for UE5):