Skip to content

How to configure movement sounds

Use this guide to connect MotionMovementSoundComponent to surface-based footstep, jump, and landing sounds.

Create the DataTable

  1. Create a DataTable using the FMotionSurfaceSoundDataRow row structure.
  2. Add a Default row for fallback sounds.
  3. Add rows for project surfaces such as concrete, wood, grass, or metal.
  4. Assign MetaSound sources for the movement actions each surface supports: FootstepMetaSound, CrouchMetaSound, SprintMetaSound, JumpMetaSound, and LandingMetaSound.
  5. Set volume and pitch multipliers for each row.

The component chooses the DataTable row from the detected physical material, then falls back to DefaultSurfaceSoundRowName when no material-specific row matches.

Movement sound DataTable default row fields

Configure the movement sound profile

  1. Add MotionMovementSoundComponent to the character.
  2. Duplicate DA_MotionMovementSoundProfile_Default_v2_0_0 from Plugins/MotionCore/Content/Motion/Profiles/v2_0_0 into your project content.
  3. Assign your DataTable to SurfaceSoundDataTable on the duplicated profile.
  4. Set DefaultSurfaceSoundRowName to the fallback row, usually Default.
  5. Enable surface detection when physical materials should select sounds.
  6. Enable 3D audio for spatialized footsteps played from the character's attached audio component.
  7. Assign a FootstepAttenuation asset if you want explicit distance falloff, spatialization, or occlusion settings. If 3D audio is enabled and this field is empty, Motion leaves Unreal's default attenuation behavior in place.
  8. Assign the duplicated profile to the component's Profile property.

Tune speed modulation

Edit SoundSettings on the duplicated profile:

FieldWhat it controls
BaseVolumeStarting volume before speed, surface, and master multipliers
SpeedVolumeMultiplierExtra volume added as platform-relative speed approaches MaxWalkSpeed
BasePitchStarting pitch before speed and surface multipliers
SpeedPitchMultiplierExtra pitch added as platform-relative speed approaches MaxWalkSpeed
VolumeVariationRandom volume offset applied when MetaSound-triggered movement sounds play
PitchVariationRandom pitch offset applied when MetaSound-triggered movement sounds play

GetSpeedBasedVolume() and GetSpeedBasedPitch() expose the current calculated values to Blueprint. SetMasterVolumeMultiplier() scales future movement sound volume and clamps the value from 0.0 to 2.0.

Set both speed multipliers to 0.0 when movement speed should not affect volume or pitch.

Configure sprint and crouch variants

Footstep notifies do not force a sprint or crouch sound by name. When a footstep notify fires, the component checks the owning character's active Motion state tags, selects SprintMetaSound first when Motion.State.Sprinting is present, selects CrouchMetaSound next when Motion.State.Crouching is present, and otherwise uses FootstepMetaSound.

Trigger sounds from animation

Add Animation Notifiers at the frames where sounds should play:

Movement momentFunction
Foot contacts groundTriggerFootstepSound()
Jump startsTriggerJumpSound()
Landing impactTriggerLandingSound()
Known string aliasTriggerMovementSound()

The component handles surface detection, state-based MetaSound selection, speed modulation, random variation, surface row multipliers, and 3D or 2D playback when the notifier fires.

TriggerMovementSound() accepts the built-in aliases Footstep, Walk, Crouch, Sprint, Run, Jump, Landing, and Land. It routes those names to the existing footstep, jump, or landing paths.

Use PlayModulatedSound() only when a Blueprint or C++ caller needs to play a supplied USoundBase directly with explicit volume and pitch multipliers. It applies the current master volume multiplier, but it does not run surface lookup, speed modulation, random variation, or sprint/crouch variant selection.

Reload DataTable changes while testing

Call ReloadSurfaceSoundDataTable() after editing rows during runtime testing or editor-callable workflows. The component clears its cached surface rows, reloads the assigned SurfaceSoundDataTable, and validates that the table uses FMotionSurfaceSoundDataRow.

For the full API reference, see MotionMovementSoundComponent.

Motion - Advanced First Person Character Controller