/// <summary> /// 改变状态 /// </summary> /// <param name="state">目标状态</param> public void ChangeState(AbstractState state) { if (_currentState == state) { return; } // 离开当前状态前调用 if (_currentState != null) { Debug.Log("OnExit: " + _currentState.GetType()); } _currentState?.OnExit(); // 改变状态 _currentState = state; // 尝试获取状态对应的转换列表 _transitions.TryGetValue(_currentState.GetType(), out _currentTransitions); // 如果没有对应的转换列表,则给一个默认的空列表 if (_transitions == null) { _currentTransitions = EmptyTransitions; } Debug.Log("OnEnter: " + _currentState.GetType()); // 进入状态时调用 _currentState.OnEnter(); }
/// <summary> /// 添加转换 /// </summary> /// <param name="from">起始状态</param> /// <param name="to">下一个状态</param> /// <param name="predicate">状态转换的条件函数</param> public void AddTransition(AbstractState from, AbstractState to, Func <bool> predicate) { // 尝试通过状态获取对应的转换列表 if (!_transitions.TryGetValue(from.GetType(), out var transitions)) { // 如果没有就先初始化 transitions = new List <Transition>(); _transitions[from.GetType()] = transitions; } // 向转换列表中添加转换 transitions.Add(new Transition(to, predicate)); }