/// <summary> /// 初始化状态机 /// 状态和转换条件在这统一初始化添加 /// 默认 除了skill和fight状态 其余状态要切换到其他状态的时候 要先切换到idle状态 /// </summary> protected override void InitStateMachine() { stateDic = new Dictionary <StateID, FSMState>(); m_FSM = new FSMSystem(); idleState = new PlayerIdleState(); moveState = new PlayerMoveState(); fightState = new PlayerFightState(); skillState = new PlayerSkillState(); //attr = player.GetComponent<AttrController>(); m_FSM.attr = attr; m_FSM.AddState(idleState, this); stateDic.Add(idleState.ID, idleState); idleState.AddTransition(Transition.IsIdle, StateID.Idle); idleState.AddTransition(Transition.IsMove, StateID.Move); idleState.AddTransition(Transition.IsDeath, StateID.Death); idleState.AddTransition(Transition.IsFight, StateID.Fight); idleState.AddTransition(Transition.IsCast_Skill, StateID.Cast_Skill); idleState.AddTransition(Transition.IsRiding, StateID.Riding); idleState.AddTransition(Transition.IsVigilance, StateID.Vigilance); idleState.AddTransition(Transition.IsChatStart, StateID.ChatStart); idleState.AddTransition(Transition.IsChatEnd, StateID.ChatEnd); m_FSM.AddState(moveState, this); stateDic.Add(moveState.ID, moveState); moveState.AddTransition(Transition.IsIdle, StateID.Idle); m_FSM.AddState(fightState, this); stateDic.Add(fightState.ID, fightState); fightState.AddTransition(Transition.IsIdle, StateID.Idle); fightState.AddTransition(Transition.IsCast_Skill, StateID.Cast_Skill); fightState.AddTransition(Transition.IsMove, StateID.Move); m_FSM.AddState(skillState, this); stateDic.Add(skillState.ID, skillState); skillState.AddTransition(Transition.IsIdle, StateID.Idle); skillState.AddTransition(Transition.IsFight, StateID.Fight); //初始状态分主城(Idle)和地下城(Fight) //设置初始状态(idle状态) if (AttrController.Instance.Fight()) { m_FSM.SetCurrentState(fightState); m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick"); //m_FSM.attr.StartCoroutine(fightState.DoLogic()); } else { m_FSM.SetCurrentState(idleState); m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick"); } //m_FSM.attr.StartCoroutine(idleState.DoLogic()); //idleState.RunLogic(); //测试战斗状态 //m_FSM.SetCurrentState(fightState); //m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick"); //m_FSM.attr.StartCoroutine(fightState.DoLogic()); }
//NPC有两个状态分别是在路径中巡逻和追逐玩家 //如果他在第一个状态并且SawPlayer 过度状态被出发了,它就转变到ChasePlayer状态 //如果他在ChasePlayer状态并且LostPlayer状态被触发了,它就转变到FollowPath状态 private void MakeFSM()//建造状态机 { PlayerIdleState idle = new PlayerIdleState(); idle.AddTransition(Transition.FreeWalk, StateID.Walk); idle.AddTransition(Transition.Dead, StateID.Dead); idle.AddTransition(Transition.Acct, StateID.Acct); idle.AddTransition(Transition.Skill, StateID.Skill); idle.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer); PlayerWalkState walk = new PlayerWalkState(); walk.AddTransition(Transition.FreeWalk, StateID.Walk); walk.AddTransition(Transition.Acct, StateID.Acct); walk.AddTransition(Transition.Skill, StateID.Skill); walk.AddTransition(Transition.Dead, StateID.Dead); walk.AddTransition(Transition.Idle, StateID.Idle); walk.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer); PlayerDeadState dead = new PlayerDeadState(); dead.AddTransition(Transition.Dead, StateID.Dead); dead.AddTransition(Transition.Idle, StateID.Idle); dead.AddTransition(Transition.FreeWalk, StateID.Walk); PlayerAcceState acce = new PlayerAcceState(); acce.AddTransition(Transition.Acct, StateID.Acct); acce.AddTransition(Transition.Skill, StateID.Skill); acce.AddTransition(Transition.FreeWalk, StateID.Walk); acce.AddTransition(Transition.Dead, StateID.Dead); acce.AddTransition(Transition.Idle, StateID.Idle); acce.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer); PlayerSkillState skill = new PlayerSkillState(); skill.AddTransition(Transition.Skill, StateID.Skill); skill.AddTransition(Transition.Acct, StateID.Acct); skill.AddTransition(Transition.FreeWalk, StateID.Walk); skill.AddTransition(Transition.Dead, StateID.Dead); skill.AddTransition(Transition.Idle, StateID.Idle); skill.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer); //PlayerSwitchState sw = new PlayerSwitchState(); //sw.AddTransition(Transition.Skill, StateID.Skill); //sw.AddTransition(Transition.Acct, StateID.Acct); //sw.AddTransition(Transition.FreeWalk, StateID.Walk); //sw.AddTransition(Transition.Dead, StateID.Dead); //sw.AddTransition(Transition.Idle, StateID.Idle); //sw.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer); PlayerCrashState crash = new PlayerCrashState(); crash.AddTransition(Transition.Skill, StateID.Skill); crash.AddTransition(Transition.Acct, StateID.Acct); crash.AddTransition(Transition.FreeWalk, StateID.Walk); crash.AddTransition(Transition.Dead, StateID.Dead); crash.AddTransition(Transition.Idle, StateID.Idle); Fsm = new FSMSystem(); Fsm.AddState(idle); Fsm.AddState(walk); Fsm.AddState(acce); Fsm.AddState(skill); Fsm.AddState(dead); //Fsm.AddState(sw); Fsm.AddState(crash); }