- 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