Посмотрите на ограничивающие иерархии томов (BVH). Они чаще всего используются при обнаружении столкновений, чтобы уменьшить количество проверок, необходимых при расчете столкновений или при рендеринге для выполнения отбраковки усеченного объекта. Поскольку вы уже используете сферы, я бы предложил дерево сфер, хотя другие тома, такие как AABB, могут быть более эффективными. Я не уверен, какую поддержку имеет Unity для таких вещей, которые я никогда не использовал, но, вероятно, что-то для этого уже есть в обнаружении столкновений или рендеринге частей движка.
По сути, вы хотите сгруппировать врагов, которые находятся рядом друг с другом, в несколько родительских сфер. Когда юнит перемещается, вы проверяете его сферу триггера на родительскую сферу вместо проверки каждого врага. Если сфера триггера пересекается с родительской сферой, вы должны проверить каждого врага внутри. Если этого не произойдет, вы можете отказаться от всех врагов, которые находятся внутри него. Вы хотели бы установить несколько уровней сфер на основе максимального размера сферы или количества врагов для каждой сферы и выполнять проверку на основе сферы высшего уровня. Тогда нужно просто спуститься по дереву, чтобы проверить каждого врага, не выполняя проверку расстояния для каждого.
Шаги требуются для каждого кадра:
- Переместить врагов
- Перестройте / обновите BVH для новых позиций противника
- Перемещайте юниты и проверяйте по отношению к сфере деревьев
Это может уменьшить количество проверок, необходимых при большом количестве врагов, но затраты на обновление и хранение дерева могут не стоить того, когда их не так много. Я не знаком с Верховным главнокомандующим, чтобы знать, что вы ищете, поэтому я предполагаю «сотни». Вам нужно будет профилировать в разных ситуациях, чтобы выяснить, будут ли накладные расходы того стоить вам.