protected void ConstructFSM() { // ________________ // PatrolState PatrolState patrolState = new PatrolState(new EnemyStateData(GetComponent <EnemyBase>(), this), Points); patrolState.AddTransition(Transition.FoundTarget, FSMStateID.TrackTarget); AddFSMState(patrolState); // ________________ // TrackPlayerState TrackPlayerState rushState = new TrackPlayerState(new EnemyStateData(GetComponent <EnemyBase>(), this)); rushState.AddTransition(Transition.LostTarget, FSMStateID.Patrol); rushState.AddTransition(Transition.FoundTarget, FSMStateID.ShootPlayer); rushState.AddTransition(Transition.ApproachedPlayer, FSMStateID.Retreating); AddFSMState(rushState); // ________________ // ShootPlayerState ShootPlayerState shootPlayerState = new ShootPlayerState(new EnemyStateData(GetComponent <EnemyBase>(), this)); shootPlayerState.AddTransition(Transition.LostTarget, FSMStateID.Patrol); shootPlayerState.AddTransition(Transition.ApproachedPlayer, FSMStateID.Retreating); AddFSMState(shootPlayerState); // ________________ // ShootPlayerState RetreatingState retreatingState = new RetreatingState(new EnemyStateData(GetComponent <EnemyBase>(), this)); retreatingState.AddTransition(Transition.LostTarget, FSMStateID.Patrol); AddFSMState(retreatingState); }
private void MakeFSM() { Vector3 target = new Vector3(Random.Range(transform.position.x - 5.0f, transform.position.x + 5.0f), Random.Range(transform.position.y - 5.0f, transform.position.y + 5.0f)); RoamingState follow = new RoamingState(target); follow.AddTransition(Transition.SawPlayer, StateID.ChasePlayer); FollowPlayerState chase = new FollowPlayerState(); chase.AddTransition(Transition.LostPlayer, StateID.FollowPath); chase.AddTransition(Transition.NearPlayer, StateID.AttackPlayer); ShootPlayerState attack = new ShootPlayerState(); attack.AddTransition(Transition.SawPlayer, StateID.ChasePlayer); sm = new FSMSystem(); sm.AddState(follow); sm.AddState(chase); sm.AddState(attack); }