In my first unity3d project (an RPG) I wasnt very clear about how to structure my project. So I decided to use an old method: created a class named GameInstance containing all the game related info, like the player instance, item factory class, game settings and time, etc. It also handles events. This class is created in the first scene, the main menu. The only disadvantage I have found is that I cant test scenes indpendently, as the GameInstance is attached to a GameObject in the first scene (and marked as DontDestroyOnLoad()), the other scenes dont have it.
I would like to know if there are more optimal or adequate approach for this issue, so I can improve my code in future projects.