- Home /
 
The question is answered, right answer was accepted
How to make the enemy choose only one cover?
I have a foreach loop that finds colliders and checks if the collider has a child with the tag cover, then the character is supposed to run into the nearest cover in the loop, how can I do that? I am not the best programmer, but I would like to know how I can achieve this. Also that the enemy does not do the code for turning and shooting when the player goes behind any cover
 void GetBehindCover()
     {
         
         Collider[] nearbyCover = Physics.OverlapSphere(transform.position, enemySight.maxRadius);
         foreach(var cover in nearbyCover)
         {
             if (cover.transform.GetChild(1).CompareTag("Cover"))
             {
                 navMesh.SetDestination(cover.transform.position);
                 Vector3 toTarget = (player.position - cover.transform.position).normalized;
                 if (Vector3.Dot(toTarget, transform.forward) > 0)
                 {
                     //the player is in front of the cover
                     //code for being behind cover
                 }
                 else
                 {
                     //the player is behind the cover
                     //code for turning around and shooting at the player
                     hasSeenPlayer = true;
                 }
             }
         }
     }
 
              Answer by Krystian_ · Aug 21, 2020 at 10:01 PM
First store the minimum distance to the cover, and since script does not have a min distance yet, just set it to infinity:
 float minDistance = Mathf.Infinity;
 
               Now make a variable for the closest cover:
 var closestCover = null;
 
               You can calculate a distance to each cover i a for loop using:
 float distance = Vector3.Distance(player.position, cover.transform.position);
 
               Now just check if distance is lower than minimum distance recorded, and if it is assign the new values:
 minDistance = distance;
 closestCover = cover;
 
               If not just continue the loop.
Hope it helps!
Follow this Question
Related Questions
Deal damage on collision 2 Answers
Making an FPS arcade game. 0 Answers
[FPS] Is it good to have the same character for AI and Players ? 1 Answer
Enemy AI Range Detection 3 Answers
Ai Alien Zombies get stuck on trees? 0 Answers