Singleton / DontDestroyOnLoad / Instantiation referencing
Firstly, I'm sure this has been asked, and most likely answered in some way/shape/form. I've tried Googling it, I've tried searching the forums for it, and I can't find the answer. If it's out there (especially if it's obvious), then I really do apologize. I'm not trying to have the internet do my legwork for me.
That said, please be nice to the n00b.
I'm making an Android game, and various parts of the (one and only) scene will change when you go up a level (making it more difficult). So, I'm using SceneManager.LoadScene(0) in more than a few places.
The game level is stored in my Game Manager (GM), and (obviously) this resets the game level to 1 every time I LoadScene. I "fixed" this by setting the GM to DontDestroyOnLoad, but I found out that doing that just caused duplicate GMs to be created every time. And of course, all the objects which use the GM reference the new copy, not the original.
So, I found and following this video: https://unity3d.com/learn/tutorials/projects/2d-roguelike-tutorial/writing-game-manager
Where the GM is now instantiated once (I think), but now I have a new problem. Since the GM is not in the scene until run-time, all the objects which reference it aren't working (they show "None (Game Object)".
tldr; Here's my question: How do I get the objects which are dependent on the GM to reference it when it hasn't (yet) been instantiated, and therefore doesn't exist? I've tried GetObjectsByTag (and tagging the GM prefab), as well as other GetObjects-type functions, but they don't appear to be working. Could I be using them incorrectly?
This is in C#.