# Dynamic Sound Playing From PhysicsActor

**URL:** <https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494>\
**Category:** Programming & Scripting\
**Tags:** unreal-engine, question\
**Created:** [October 21, 2026, 9:25pm UTC](https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494 "2026-10-21T21:25:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![altmanto](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@altmanto](https://forums.unrealengine.com/u/altmanto)\
**Post date:** [October 21, 2026, 9:25pm UTC](https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494/1 "2026-10-21T21:25:35Z")

</div>

Hello, I’m not sure how to explain this, but I’ve got an object that has physics constraints and I would like to play sounds depending on how the object moves. I’m adding impulses/force on the body and there are wheels connected to the body.

The constraints also allow limited movement on the Z axis making it feel like there is suspension on the car.

The problem comes from the fact that the object dynamically interacts with the environment like slopes, bumpy terrain and other physics-based interactions. (sharp turn = wheels scraping etc)

I’m just trying to find a way to get data or a starting point on what the wheels hit etc. also how much the Z axis on the physics constraint is moving by.

---

<div class="post-metadata">

**Author:** ![ChenDong](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@ChenDong](https://forums.unrealengine.com/u/ChenDong)\
**Post date:** [October 22, 2026, 12:45am UTC](https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494/2 "2026-10-22T00:45:34Z")

</div>

You can get all three pieces of data in Blueprint without C++:

1. Impacts / scraping: on the car body and each wheel, enable Simulation Generates Hit Events (Collision \> Notify Rigid Body Collision). Then use On Component Hit. Normal Impulse (length) tells you how hard it hit, and Hit \> Phys Material gives the surface. Map the impulse to volume with Map Range Clamped and spawn a one-shot sound at Impact Point. Throttle it with a short Retriggerable Delay or a per-wheel cooldown so you don’t fire every tick. For continuous scraping, set a bool while hits keep arriving and clear it after ~0.1 s without hits, driving a looping Audio Component’s volume.
2. What the wheel is on: do a Line Trace By Channel from each wheel downward with Return Physical Material ticked, then Get Surface Type and Switch on it (gravel, asphalt…) to choose the sound. Physical Materials need to be assigned in the materials/landscape layers.
3. Suspension travel: the constraint component doesn’t expose linear position, so compute it yourself on Tick: Inverse Transform Location (Body transform, Wheel world location) gives the wheel position in body space; its Z minus the rest Z is the compression. Divide the change since last frame by Delta Seconds to get compression speed. Large speed means a bump, so trigger a thump scaled by it.
4. Slip / sharp turns: Get Physics Linear Velocity at the wheel, project it on the wheel’s forward and right vectors; a large sideways component compared to forward means skidding, so fade in a skid loop with that ratio.

Feed these numbers into one Audio Component playing a MetaSound or Sound Cue using Set Float Parameter (e.g. Speed, Slip, Compression) so the sound changes smoothly.

---

<div class="post-metadata">

**Author:** ![altmanto](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@altmanto](https://forums.unrealengine.com/u/altmanto)\
**Post date:** [October 26, 2026, 2:23am UTC](https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494/3 "2026-10-26T02:23:42Z")

</div>

Thanks For Replying

I’m happy to know that Simulation Generate Hit Events is a great starting point. It will be a while before I get a physics driven sound simulation to completely work.

I think I can skip the retriggerable delay by using concurrency in MetaSounds.

Other than that, Get Physics Linear is the sum of the rotational velocity and the ground velocity (I’m guessing, as Im getting high velocity whilst turning in place). I just want the Plane velocity or ground velocity. Should I just subtract Angular Velocity From Physics Linear Velocity? If so, can you tell me the node to convert Degrees for that to work.

Thanks

---

<div class="post-metadata">

**Author:** ![ChenDong](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@ChenDong](https://forums.unrealengine.com/u/ChenDong)\
**Post date:** [October 26, 2026, 5:47am UTC](https://forums.unrealengine.com/t/dynamic-sound-playing-from-physicsactor/2843494/4 "2026-10-26T05:47:02Z")

</div>

Get Physics Linear Velocity is already the center-of-mass velocity in world space (cm/s). It is not linear plus angular added together. What you see while turning in place is the body still sliding a little, or you sampled a wheel that is spinning. Do not subtract Angular Velocity from Linear Velocity. Those are different units (deg/s vs cm/s), so the difference is meaningless.

Velocity at a point on the body, such as a wheel contact, is:

v\_point = v\_com + ω × r

r is the vector from the center of mass to that point, and ω has to be radians per second.

On the body primitive:

1. v\_com = Get Physics Linear Velocity.
2. ω = Get Physics Angular Velocity in Radians. If you only have Get Physics Angular Velocity, that node is degrees/s. Run each component through Degrees to Radians before the cross product. Nothing else needs converting.
3. r = wheel world location minus Get Center of Mass.
4. v\_point = v\_com + Cross Product(ω, r).

That is the contact’s velocity. For a ground-plane speed, project it onto the ground so the suspension bounce drops out:

v\_plane = v\_point - Up \* Dot(v\_point, Up)

Use the ground normal from the wheel trace as Up, not world +Z, or a slope leaks vertical speed into the number.

If you wanted the chassis speed with the spin removed, that is just v\_com projected the same way. Add the cross product only when you care about the wheel itself (scrape, tire speed).

MetaSounds concurrency is a fine replacement for the retrigger delay. Drive the volume from the length of v\_plane, not from the raw angular velocity.
