protected virtual void SwitchState <T>(State newState, T param) { if (_currentState != null && _currentState.GetType() == newState.GetType()) { return; } _currentState?.ExitState(); _currentState = newState; _currentState.InitState(param); _updateState = _currentState.UpdateState; }