Ejemplo simple con música, SFX y Audio Mixer.

using UnityEngine;
using UnityEngine.Audio;

public class AudioManager : MonoBehaviour
{
    public static AudioManager Instance;

    [Header("Sources")]
    [SerializeField]
    private AudioSource musicSource;

    [SerializeField]
    private AudioSource sfxSource;

    [Header("Mixer")]
    [SerializeField]
    private AudioMixer mixer;

    void Awake()
    {
        if (Instance != null &&
            Instance != this)
        {
            Destroy(gameObject);
            return;
        }

        Instance = this;

        DontDestroyOnLoad(
            gameObject
        );
    }

    public void PlayMusic(
        AudioClip clip)
    {
        if (musicSource.clip == clip &&
            musicSource.isPlaying)
        {
            return;
        }

        musicSource.clip = clip;
        musicSource.loop = true;
        musicSource.Play();
    }

    public void PlaySFX(
        AudioClip clip)
    {
        sfxSource.PlayOneShot(
            clip
        );
    }

    public void SetMasterVolume(
        float value)
    {
        value = Mathf.Max(
            value,
            0.0001f
        );

        float db =
            Mathf.Log10(value) *
            20f;

        mixer.SetFloat(
            "MasterVolume",
            db
        );

        PlayerPrefs.SetFloat(
            "MasterVolume",
            value
        );
    }
}

Qué incluye

Mejoras posibles