Quick answer: The most common causes are a missing AudioListener in the scene, no AudioClip assigned to the AudioSource, the AudioSource component being disabled, Play On Awake being unchecked without a manual Play() call, Spatial Blend set to 3D when the listener is too far away, or the AudioMixer group volume b...
Here is how to fix Unity audio not playing. You have an AudioSource component on your GameObject, an AudioClip assigned, and you are calling Play() in your script — but no sound comes out. No errors in the Console, no warnings, just silence. Unity's audio pipeline has multiple stages between "play a sound" and "sound reaches speakers," and a failure at any point in that chain will silently produce nothing. Here is how to trace the problem and fix it.
The Symptom
You call audioSource.Play() or rely on Play On Awake, but no sound is audible during Play mode. The AudioSource component may show its progress bar moving (indicating it thinks it is playing), or it may not animate at all. In some cases, the sound plays in the Scene view when you click the preview button in the Inspector but produces nothing in the Game view. In other cases, the sound works fine for a while and then stops working after a scene change or camera switch.
The issue may be universal (no sound at all from any source) or specific to a single AudioSource. Universal silence points to an AudioListener or global audio setting issue. Per-source silence points to a configuration problem on that specific AudioSource.
What Causes This
Unity's audio playback requires a complete pipeline: an AudioClip loaded into an AudioSource, the AudioSource enabled and playing, an AudioMixer path with non-zero volume (if routed through a mixer), and an active AudioListener in the scene to receive the sound. Breaking any link in this chain produces silence without an error.
- Missing AudioListener — Unity requires exactly one active AudioListener in the scene (usually on the Main Camera). If your camera does not have one, or if you destroyed the camera and spawned a new one without an AudioListener, there is no "ear" in the scene to receive audio. Unity logs a warning about missing AudioListeners, but it is easy to miss among other log messages.
- Multiple AudioListeners — If two or more AudioListeners are active simultaneously (for example, after loading an additive scene that has its own camera), Unity will warn you and may behave unpredictably. Only one can be active at a time.
- No AudioClip assigned — Calling
Play()on an AudioSource with a nullclipproperty does nothing. This happens when you forgot to assign the clip in the Inspector, or when a serialized reference broke after moving or renaming the audio file. - Play On Awake disabled without manual Play call — If
Play On Awakeis unchecked and your code never callsPlay(),PlayOneShot(), orPlayDelayed(), the AudioSource will never start playing. - Spatial Blend set to 3D with distant listener — When
Spatial Blendis set to 1.0 (fully 3D), the sound attenuates based on the distance between the AudioSource and the AudioListener. If the listener is beyond theMax Distance, the volume drops to zero. This is especially tricky for UI or ambient sounds that should be audible everywhere. - AudioMixer group at minimum volume — If the AudioSource is routed through an AudioMixer and any group in the chain has its volume set to -80 dB (the bottom of the slider), the output is silent. Mixer snapshots can also mute groups unexpectedly.
- AudioSource or GameObject disabled — A disabled AudioSource component or an inactive GameObject will not play. Calling
Play()on a disabled source is a silent no-op.
The Fix
Step 1: Verify the AudioListener and basic AudioSource setup. Confirm that your scene has exactly one active AudioListener and that the AudioSource has a clip, is enabled, and has its volume above zero. Use this diagnostic script to check the entire audio pipeline at startup:
using UnityEngine;
public class AudioPipelineDebugger : MonoBehaviour
{
void Start()
{
// Check AudioListeners
AudioListener[] listeners = FindObjectsByType<AudioListener>(FindObjectsSortMode.None);
if (listeners.Length == 0)
{
Debug.LogError("No AudioListener found in scene! No audio will be heard.");
}
else if (listeners.Length > 1)
{
Debug.LogWarning($"Found {listeners.Length} AudioListeners. Only one should be active.");
foreach (AudioListener listener in listeners)
{
Debug.LogWarning($" AudioListener on: {listener.gameObject.name}", listener.gameObject);
}
}
else
{
Debug.Log($"AudioListener found on: {listeners[0].gameObject.name}");
}
// Check global audio volume
if (AudioListener.volume <= 0f)
{
Debug.LogError($"AudioListener.volume is {AudioListener.volume}. No audio will be heard.");
}
if (AudioListener.pause)
{
Debug.LogError("AudioListener.pause is true. All audio is paused.");
}
}
/// Call this to diagnose a specific AudioSource
public static void DiagnoseAudioSource(AudioSource source)
{
if (source == null)
{
Debug.LogError("AudioSource reference is null.");
return;
}
if (!source.enabled)
Debug.LogError($"AudioSource '{source.name}' is disabled.");
if (!source.gameObject.activeInHierarchy)
Debug.LogError($"GameObject '{source.name}' is inactive.");
if (source.clip == null)
Debug.LogError($"AudioSource '{source.name}' has no AudioClip assigned.");
if (source.volume <= 0f)
Debug.LogWarning($"AudioSource '{source.name}' volume is {source.volume}.");
if (source.mute)
Debug.LogWarning($"AudioSource '{source.name}' is muted.");
Debug.Log($"AudioSource '{source.name}' - Clip: {source.clip?.name}, "
+ $"Volume: {source.volume}, SpatialBlend: {source.spatialBlend}, "
+ $"PlayOnAwake: {source.playOnAwake}, IsPlaying: {source.isPlaying}");
}
}
Step 2: Fix Spatial Blend and 3D distance attenuation. If your sound should be heard regardless of camera position (music, UI sounds, ambience), set Spatial Blend to 0 (2D). If you need 3D spatialization, make sure the Max Distance on the AudioSource is large enough that the AudioListener can hear it from wherever the camera might be. You can visualize the attenuation range using gizmos:
using UnityEngine;
public class AudioSourceSetup : MonoBehaviour
{
[Header("Audio Settings")]
[SerializeField] private AudioClip _clip;
[SerializeField] private bool _is3D = false;
[SerializeField] private float _maxDistance = 50f;
private AudioSource _source;
void Awake()
{
_source = GetComponent<AudioSource>();
if (_source == null)
_source = gameObject.AddComponent<AudioSource>();
_source.clip = _clip;
if (_is3D)
{
// 3D audio: sound attenuates with distance
_source.spatialBlend = 1.0f;
_source.minDistance = 1f;
_source.maxDistance = _maxDistance;
_source.rolloffMode = AudioRolloffMode.Logarithmic;
}
else
{
// 2D audio: same volume everywhere, no spatialization.
// Use this for music, UI clicks, and global ambience.
_source.spatialBlend = 0f;
}
}
public void PlaySound()
{
if (_source.clip == null)
{
Debug.LogWarning("Cannot play: no AudioClip assigned.");
return;
}
_source.Play();
}
/// Use PlayOneShot for sound effects that may overlap
/// (e.g., gunshots, footsteps, coin pickups)
public void PlaySFX(AudioClip clip)
{
if (clip == null) return;
_source.PlayOneShot(clip);
}
// Draw the audio range in the Scene view for debugging
void OnDrawGizmosSelected()
{
if (_is3D)
{
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, _maxDistance);
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(transform.position, 1f); // minDistance
}
}
}
Step 3: Check AudioMixer routing and volume levels. If your AudioSource is routed through an AudioMixer, every group in the chain must have a volume above -80 dB. Open the Audio Mixer window (Window > Audio > Audio Mixer) and check each group's fader. Also check if a mixer snapshot is overriding volumes. You can verify and control mixer volume from code:
using UnityEngine;
using UnityEngine.Audio;
public class AudioMixerDebugger : MonoBehaviour
{
[SerializeField] private AudioMixer _mixer;
// Exposed parameter names from the AudioMixer.
// Right-click a volume slider in the Mixer and choose
// "Expose ... to script" to make it accessible.
[SerializeField] private string _masterVolumeParam = "MasterVolume";
[SerializeField] private string _sfxVolumeParam = "SFXVolume";
[SerializeField] private string _musicVolumeParam = "MusicVolume";
void Start()
{
if (_mixer == null)
{
Debug.LogError("No AudioMixer assigned.");
return;
}
LogMixerVolume(_masterVolumeParam);
LogMixerVolume(_sfxVolumeParam);
LogMixerVolume(_musicVolumeParam);
}
private void LogMixerVolume(string paramName)
{
if (_mixer.GetFloat(paramName, out float value))
{
if (value <= -80f)
Debug.LogError($"Mixer param '{paramName}' is at {value} dB (silent).");
else
Debug.Log($"Mixer param '{paramName}' = {value} dB");
}
else
{
Debug.LogWarning($"Mixer param '{paramName}' not found. Is it exposed?");
}
}
/// Convert a 0-1 slider value to decibels for the mixer.
/// AudioMixer uses dB (-80 to 0), not linear 0-1.
public void SetVolume(string paramName, float linearValue)
{
// Convert linear (0..1) to decibels (-80..0)
float dB = linearValue > 0.0001f
? Mathf.Log10(linearValue) * 20f
: -80f;
_mixer.SetFloat(paramName, dB);
}
}
If audio still does not play after checking all three areas, verify that the audio file itself is valid. Import settings can cause issues: check that the AudioClip's Load Type is appropriate (use Decompress On Load for short SFX, Streaming for long music tracks) and that the file format is supported. You can test a clip directly with AudioSource.PlayClipAtPoint(clip, transform.position), which creates a temporary AudioSource and bypasses your existing configuration entirely.
Related Issues
See also: Fix: Unity UI Button Not Responding to Clicks.
See also: Fix: Unity Pink or Magenta Materials (Missing Shader).
No AudioListener means no ears in the scene. Check your camera first.