/// <summary> /// 状态Update回调 /// </summary> /// <param Name="deltaTime">延迟时间</param> public override void OnUpdateCallBack(float deltaTime) { if (m_CurrentState == null) { return; } List <ITransition> trans_List = m_CurrentState.Transition_List; ITransition transTemp = null; foreach (ITransition trans in trans_List) { if (trans.OnCheckTrans()) { //转换状态 transTemp = trans; break; } } //转换状态 if (transTemp != null) { //转换中 transTemp.OnTransition(); //当前状态退出 m_CurrentState.OnExitState(transTemp.ToState); m_CurrentState = transTemp.ToState; //进入下一状态 m_CurrentState.OnEnterState(transTemp.FromState); } //当天状态更新 m_CurrentState.OnUpdateCallBack(deltaTime); }
private void SetStateWithEntryExitActions(IStateMachine <S, E, C> machine, S fromState, S toState, ITransition <S, E, C> transition, E evt, C context) { if (ShouldExecuteEntryAndExitActions(transition)) { var actions = (ActionCollection)null; m_ExitActions.TryGetValue(fromState, out actions); InvokeActions(actions, fromState, toState, evt, context, machine); } machine.SetStateNoActions(toState); if (transition != null) { transition.OnTransition(fromState, toState, evt, context, machine); } if (ShouldExecuteEntryAndExitActions(transition)) { var actions = (ActionCollection)null; m_EnterActions.TryGetValue(toState, out actions); InvokeActions(actions, fromState, toState, evt, context, machine); } }