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;
 }