// Update is called once per frame void Update() { FSM.Update(); if (Input.GetKey(KeyCode.Q)) { FSM.SetState(0); } if (Input.GetKey(KeyCode.W)) { FSM.SetState(1); } if (Input.GetKey(KeyCode.E)) { FSM.SetState(2); } }
// Update is called once per frame public override void Update() { base.Update(); FSM.Update(); //Chequea que no haya ocurrido ningun cambio en la FSM. //-------------Line of Sight---------------------------------------------------------------------------- CheckForEnemies(); //---------------------State triggers------------------------------------------------------------------- if (CurrentTarget != null) { float Dist = Vector3.Distance(transform.position, CurrentTarget.transform.position); //Si esta dentro de mi rango, lo Ataco. if (Dist <= BSO_AttackRange) { FSM.SetState(2); //Attack Current Target } //Si hay al menos un objetivo visible y esta mas lejos que mi rango de ataque. if (Dist > BSO_AttackRange && CurrentTarget != null) { FSM.SetState(1); //Pursuit Target. } } }
void Awake() { //Inicializo la state machine y añado los estados. FSM = new GenericFSM(); object[] BattleStats = { BSO_BasicDamage, BSO_MagicPower, BSO_Strenght, BSO_AttackSpeed, BSO_AttackRange }; EstadosDelNpc = new List <State> { new StateIdle(gameObject), //0 new StatePursuit(gameObject), //1 new StateAttack(gameObject, BattleStats), //2 }; //Para añadir un Estado necesito un entero(índice) + Un action para Awake, Execute y Sleep; for (int i = 0; i < EstadosDelNpc.Count; i++) { FSM.AddState(i, EstadosDelNpc[i].execute, EstadosDelNpc[i].awake, EstadosDelNpc[i].sleep); } FSM.SetState(0); }