//Stateを変更する際に通す関数 //自動でEnterとExitに通るようになっている public void ChangeState(StateTagList _tag, MonoBehaviour _mono) { IState _state = stateList.Getstate(_tag); state?.Exit(_mono); state = _state; state?.Enter(_mono); }
//StateMachineを持たせているscriptのUpdateでこの関数を回してやる //引数に自分のGameObjectを持たせてやる public void Update(MonoBehaviour _mono) { if (state != null) { StateTagList _tag = state.Execute(_mono); if (_tag != StateTagList.none) { ChangeState(_tag, _mono); } } }
//ここにタグを引数として入れればそのStateがかえってくる public IState Getstate(StateTagList _tag) { return(statelist[_tag]); }
//この関数でStateリストの追加 public void AddState(StateTagList _tag, IState _state) { statelist.Add(_tag, _state); }