public bool GoToState(ref IState state) { if(state != null){//Return false if "state" is null. if(_currnetState == state) return true;//Allready is in state. so do nothing and return true; _updateCurrnetState = false;//Do not call "OnUpdate()" event on current state anymore. if(_currnetState != null)//Do not call "OnExit()" event when no previous state is exist. StartCoroutine(_currnetState.OnExit()); _preState = _currnetState; _currnetState = state; StartCoroutine(_currnetState.OnBegin()); _updateCurrnetState = true;//Current state changed and need to start "OnUpdate()" envent again.; return true; } CDebug.LogError("Can not change state."); return false; }