/// <summary> /// 状态机的回调(Update) /// 也是状态机的启动方法 /// </summary> /// <param name="deltaTime">即Time.deltaTime</param> public override void OnUpdateExecute(float deltaTime) { // 判断是否正在进行状态过渡 if (_isTransition) { // 判断状态过渡的回调是否执行完毕 if (_currentTransition.TransitionCallBack()) { // 执行状态过渡(就是状态的退出 和 进入方法) DoTransition(_currentTransition); _isTransition = false; } return; } // 开始运行时,给_currentState 赋值 if (_currentState == null) { _currentState = _defalutState; } base.OnUpdateExecute(deltaTime); // 内部就是一个计时,实际运用查看是否需要 //遍历 当前状态的 状态过渡列表:查看满足哪个条件,就执行过渡 foreach (ITransition transition in _currentState.TransitionList) { if (transition.CheckTransition()) { _isTransition = true; _currentTransition = transition; return; } } // 没有满足任何一个过渡条件,就执行当前状态的 Update 回调 _currentState.OnUpdateExecute(deltaTime); }