Hello, Working a a state machine using interfaces. However, I'm having trouble getting the statemachine to change states when needed. Looking for a little guidance on possible structure that I may not be getting right now. First off I have the state machine script(Not MonoBehaviour): Code (CSharp): public class StateMachine { public Dictionary<string, IState> gStates = new Dictionary<string, IState>(); public IState gCurrentState = new EmptyState(); public void Update(float elapsedTime) { gCurrentState.Update(elapsedTime); } public void Render() { gCurrentState.Render(); } public void Change(string stateName) { gCurrentState.OnExit(); gCurrentState = gStates[stateName]; gCurrentState.OnEnter(); } public void Add(string name, IState state) { gStates[name] = state; } } I have an interface setup for states to use which looks like this: Code (CSharp): public interface IState { void Update(float elapsedTime); void Render(); void OnEnter(); void OnExit(); } and i'm creating/starting the state machine in my Game Manager: Code (CSharp): public StateMachine gGameMode = new StateMachine(); //skipping unrelated code public void Update() { float elapsedTime = Time.deltaTime; gGameMode.Update(elapsedTime); gGameMode.Render(); Debug.Log(gGameMode.gCurrentState); } public void MainStateMachine() { gGameMode.Add("mainmenu", new MainMenuState()); gGameMode.Add("battle", new BattleState()); gGameMode.Add("emptystate", new EmptyState()); gGameMode.Change("mainmenu"); } So the game manager creates the Game machine. However, I'm having trouble getting other scripts to interact and change the state when needed. I was trying to avoid using MonoBehaviour but I think that's the missing link. Separate scripts are made for each state but they are not inheriting from MonoBehaviour. Only trying to work with two right now. I've been playing around with it and I can get it to work but it's not exactly how I envision it. I feel like I'm missing something conceptional about how to interact with the statemachine.