Hello! I've been struggling with Game States for a few months between different projects and thought of asking here. I seem to always overcomplicate this, but at the same time if I try doing it in a simple way I feel like I won't have much control and it get messy very soon. How do you deal with it? I know it's a very broad question, so I'll try to explain my difficulties and what I tried. Sometimes, specially during game jams, I use enums for each State in a GameManager script and it gets the job done. I write a ChangeState method, which receives newState as a parameter, calls an ExitState method, updates the currentState variable to the newState, then calls an EnterState method. ExitState and EnterState both have a switch(currentState) and a case for each GameState with the code I want to execute. The problem I have with this is that for a larger game (not big, but larger than a game jam one) it will become a mess to have a switch case for each state, specially since I keep trying to make EVERYTHING a state and will probably add more as the development progresses - SplashScreen, LoadingMenu, MainMenu, OptionsMenu, ConfirmQuitGame, LoadingMatch, MatchSetup, Match, EndMatch, GameOver, Results, and so on... I tried applying what I learned from the PluggableAI tutorial, but instead of using the States for AI, I used for the Game States. So, each State was a ScriptableObject and they each had their own actions (like LoadLevelGeometry, SpawnPlayers, FadeOut, ...) that I could rearrange. THe problems I had with this were mainly due to programming inexperience - it was extremely hard for me to give the actions the parameters and references they needed to work with and also some actions needed to happen over time or wait for them to be finished before going to the next action, which I couldn't do with the ScriptableObjects. Now, I'm trying to make a GameManager GO with a GameManager script that has references to individual scripts that inherit from GameStateBase. There will be a script for each GameState and all of them will be components in the GameManager GO. GameStateBase has EnterState, ExitState and ExecuteState methods. GameManager will have a currentState variable with refeference one of the GameState scripts and will call the methods inside them, overridden from the GameStateBase. My problem with this is - where do I write the "actions", the steps that each state needs to go through, their routines? In the GameManager class and the GameStates will call them? Or inside each state, which can be a problem, because the same step might need to happen in different states? I'd like to know if someone can point me to a better way, suggest someting to improve what I tried or explain a different way that was used for a finished project, please. Every time I try to start a game, I get stuck trying to make a better, I don't know, architecture (?). I can show codes of my approaches if it is of any help! Thanks!