To answer your side question first, You are trying to create a persistent class and for that what you can do is:
public class UnitySingletonPersistent<T> : MonoBehaviour where T : Component
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = FindObjectOfType<T>();
if (instance == null)
{
var obj = new GameObject {hideFlags = HideFlags.HideAndDontSave};
instance = obj.AddComponent<T>();
}
}
return instance;
}
}
public virtual void Awake()
{
DontDestroyOnLoad(gameObject);
if (instance == null)
{
instance = this as T;
}
else
{
Destroy(gameObject);
}
}
}
Now inherit from this like:
public class AudioManager : UnitySingletonPersistent<AudioManager>
{
//Remove awake from here you don't need Don't Destroy On Load here.
}
Now towards your main question. The problem is that you are getting SceneManager.GetActiveScene() in the Start() which is why when in Update when even scene changes you don't have updated scene name.
Try
Checking name like:
if (SceneManager.GetActiveScene().name == "Game" && currentScene == false)
{
//Your rest of the code
}
OR you could update your currentScene variable every time you change the scene instead of doing that only once.