Object Detection Within Set Range of Another Object

Simply put, I’m trying to get a tower to detect creeps for a tower defense game. I’ve been wondering if there might be something faster than Physics.OverlapSphere. Particularly when there’s the potential to have some 50 towers checking for collisions with possibly hundreds of hits per tower. Is there another function I’m missing that would return only a single collision?

One other option I had considered was only running an OverlapSphere when it has no target to acquire one, and then simply keep shooting it until it dies or goes out of range. Obviously, a new OverlapSphere check would be run at that point to get a new target.

Check if enemy is within distance to the turret, and then have target for the turret equal the closest (or furthest) enemy(ies)?

Might want to use a List or Array with it as well.

You could have a manager that knows where all the creeps are and all the turrets are.

the manager just has to do a simple distance measure and tell the turret which target to attack