private void MakeFSM() { mFSMSystem = new FSMSystem(); FSMState standbyState = new StateStandby(mFSMSystem); ///standbyState StateID.StandbyState,转换条件分别为 ///Transition.SeeEnemy standbyState.AddTransition(Transition.SeeEnemy, StateID.ChaseState); FSMState chaseState = new StateChase(mFSMSystem); ///由ChaseState状态可以转换到 StateID.StandbyState StateID.AttackState,转换条件分别为 ///Transition.DonotSeeEnemy Transition.EnemyInTheAttackRange chaseState.AddTransition(Transition.DonotSeeEnemy, StateID.StandbyState); chaseState.AddTransition(Transition.EnemyInTheAttackRange, StateID.AttackState); FSMState attackState = new StateAttack(mFSMSystem); ///由attackState状态可以转换到 StateID.StandbyState StateID.ChaseState,转换条件分别为 ///Transition.DonotSeeEnemy Transition.EnemyOutOfTheAttackRange attackState.AddTransition(Transition.DonotSeeEnemy, StateID.StandbyState); attackState.AddTransition(Transition.EnemyOutOfTheAttackRange, StateID.ChaseState); mFSMSystem.AddState(standbyState); mFSMSystem.AddState(chaseState); mFSMSystem.AddState(attackState); }
public Enemy() { sightRadius = 100f; //Init states idle = new StateIdle(this); chase = new StateChase(this); attack = new StateAttack(this); //Linking states NB: questo è brutto idle.Chase = chase; chase.Idle = idle; chase.Attack = attack; attack.Idle = idle; attack.Chase = chase; //Turn on the FSM and set currentstate to idle idle.OnStateEnter(); currentState = idle; }
public virtual StateChase Chase(){ StateChase state = new StateChase (this); StateContext.SetState (state); return state; }