s&box/field-guide
the symptom, in your words

"Sound.Play() is fully static — no component wiring needed"

✓ verified on engine 26.07lane: Audioposted
▸ SYMPTOM

You wire up a component or bootstrap system to play a sound, but nothing plays — or you spend time searching for a "SoundComponent" that doesn't exist.

▸ CAUSE

The sound API is entirely static. There is no component to attach to a GameObject. Trying to find one or wiring custom infrastructure around it is unnecessary complexity.

▸ FIX

Call the static methods directly:

snippet
// 2D (UI, ambient, non-positional)
Sound.Play( "sounds/ui_click.sound" );

// 3D (positional, returns a handle)
SoundHandle handle = Sound.Play( "sounds/explosion.sound", Transform.Position );

SoundHandle gives you runtime control:

  • .Volume / .Pitch / .Position — adjust on the fly
  • .IsPlaying / .Finished — poll state
  • .Stop( fadeSeconds ) — fade out
  • .IsValid() — check the handle is still live

A missing .sound event won't hard-throw, but wrap playback in a try/catch if the asset might not exist yet (e.g. procedurally generated sound events) so a missing file can't break gameplay.

▸ WHY IT WORKS

The engine manages the audio subsystem globally. Sound.Play() submits the event to the mixer directly — no per-object lifecycle, no component enable/disable, no OnStart timing. This is the same pattern as particle one-shots: fire and optionally hold the handle.

Verified on engine 26.07 — seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?