Розгляньте обмежувальні ієрархії обсягу (BVH). Вони найчастіше використовуються при виявленні зіткнень, щоб зменшити кількість перевірок, необхідних при обчисленні зіткнень, або при наданні для винищення фрустуму на об'єктах. Оскільки ви вже використовуєте сфери, я б запропонував дерево сфери, хоча інші томи, такі як AABB, можуть бути ефективнішими. Я не впевнений, яку підтримку має Unity для таких речей, як я ніколи цього не використовував, але, мабуть, є щось для цього вже в межах виявлення зіткнень або надання частин двигуна.
В основному, ви хочете згрупувати ворогів, які знаходяться поруч один з одним, у декілька батьківських сфер. Коли підрозділ переміщується, ви перевіряєте його тригерну сферу проти батьківської сфери, а не кожного ворога. Якщо куля спуску перетинається з батьківською сферою, ви перевірите кожного ворога всередині. Якщо цього не відбувається, ви можете відкинути всіх ворогів, які знаходяться в ньому. Ви хочете встановити декілька рівнів сфер на основі максимального розміру сфери або кількості ворога для кожної сфери та виконати перевірку на основі сфери верхнього рівня. Тоді справа лише в тому, щоб спуститися по дереву, щоб перевірити кожного ворога, не потребуючи перевірки відстані для кожного.
Необхідні кроки для кожного кадру:
- Рухайте ворогів
- Побудуйте / оновіть BVH для нових позицій противника
- Перемістіть одиниці і перевірте, чи немає дерев сфери.
Це може зменшити кількість перевірок, коли ворогів багато, але накладні оновлення та зберігання дерева можуть не коштувати, коли їх не так багато. Я не знайомий з верховним командувачем, щоб знати, що ти шукаєш, тому я просто припускаю "сотні". Вам потрібно буде профайлювати в різних ситуаціях, щоб дізнатись, чи вартий буде накладний наклад.