private void InitStateMachine() { IAIState state = null; if (_stateMachine != null) { state = _stateMachine.Current; _stateMachine.StateChanged -= this.OnStateChanged; _stateMachine = null; } switch (_stateSource) { case AIStateMachineSourceMode.SelfSourced: _stateMachine = TypedStateMachine <IAIState> .CreateFromComponentSource(this.gameObject); break; case AIStateMachineSourceMode.ChildSourced: _stateMachine = TypedStateMachine <IAIState> .CreateFromParentComponentSource(this.gameObject, false, true); break; } _stateMachine.StateChanged += this.OnStateChanged; foreach (var st in _stateMachine) { st.Init(this); } if (this.started) { if (!state.IsNullOrDestroyed() && _stateMachine.Contains(state)) { _stateMachine.ChangeState(state); } else { _stateMachine.ChangeState((IAIState)null); } } }