public void Execute() { // Check for targets if (!zombie.CheckForTargets()) // Cannot see a target { zombie.stateMachine.ChangeState(new InvestigateState(zombie)); } else // Can see a target, check if they are within attacking distance { float sqrTargetDist = Maths.SqrMag(zombie.transform.position - zombie.target.transform.position); if (sqrTargetDist < Maths.Squared(zombie.attackRange)) { zombie.stateMachine.ChangeState(new AttackState(zombie)); } } }
public void Execute() { // Set a new random target position if we have reached the last one if (zombie.transform.position.x == target.x || target == Vector3.zero) { if (zombie.transform.position.z == target.z || target == Vector3.zero) { target = AI.GetRandomTargetPosition(zombie.transform.position, Random.Range(20f, 40f)); zombie.agent.SetDestination(target); } } // If zombie can see a target if (zombie.CheckForTargets()) { // Go to the chase state zombie.stateMachine.ChangeState(new ChaseState(zombie)); } }
public void Execute() { // Check if zombie can see a target once a second if (Time.time > nextTargetCheck) { checks++; nextTargetCheck = Time.time + targetCheckDelay; if (zombie.CheckForTargets()) { zombie.stateMachine.ChangeState(new ChaseState(zombie)); // It can see a target, go to chase state } else { if (checks > 3) { zombie.stateMachine.ChangeState(new WanderState(zombie)); } } } }