/// <summary> /// 删除映射对 /// </summary> public void RemoveTransition(FSMTransitionID transitionID) { // 判空 if (transitionID == FSMTransitionID.NullTransition) { Debug.LogError("FSMState ERROR: NullTransition is not allowed"); return; } // 确实存在 if (map.ContainsKey(transitionID)) { map.Remove(transitionID); RemoveTransitionObject(transitionID); return; } Debug.LogError("FSMState ERROR: Transition " + transitionID.ToString() + " passed to " + stateID.ToString() + " was not on the state's transition list"); }
/// <summary> /// 执行状态转换,当前+条件->下一个 /// </summary> public void PerformTransition(FSMTransitionID trans) { // 判空 if (trans == FSMTransitionID.NullTransition) { Debug.LogError("FSM ERROR: NullTransition is not allowed for a real transition"); return; } // 尝试获取下一个状态ID FSMStateID nextStateID = currentState.GetOutputState(trans); if (nextStateID == FSMStateID.NullState) { Debug.LogError("FSM ERROR: State " + currentStateID.ToString() + " does not have a target state " + " for transition " + trans.ToString()); return; } // 获取下一个状态 FSMState nextState = null; if (nextStateID == FSMStateID.Default) { nextState = defaultState; } else { nextState = states.Find(s => s.StateID == nextStateID); } // 更新状态 currentState.DoBeforeLeaving(); if (!currentState.isFinished) { SavePreviousState(); } currentState = nextState; currentStateID = nextState.StateID; currentState.DoBeforeEntering(); }
/// <summary> /// 增加映射对 /// </summary> /// <param name="transitionID">转换条件ID</param> /// <param name="stateID">下一个转台ID</param> public void AddTransition(FSMTransitionID transitionID, FSMStateID stateID) { // 判空 if (transitionID == FSMTransitionID.NullTransition) { Debug.LogError("FSMState ERROR: NullTransition is not allowed for a real transition"); return; } if (stateID == FSMStateID.NullState) { Debug.LogError("FSMState ERROR: NullStateID is not allowed for a real ID"); return; } // 已经存在 if (map.ContainsKey(transitionID)) { Debug.LogError("FSMState ERROR: State " + this.stateID.ToString() + " already has transition " + transitionID.ToString() + "Impossible to assign to another state"); return; } map.Add(transitionID, stateID); AddTransitionObject(transitionID); }