Lihatlah hierarki pembatas volume (BVH). Mereka paling sering digunakan dalam deteksi tabrakan untuk mengurangi jumlah pemeriksaan yang dibutuhkan saat menghitung tabrakan atau rendering untuk melakukan frustum pemusnahan pada objek. Karena Anda sudah menggunakan bola, saya sarankan pohon bola meskipun volume lain seperti AABB mungkin lebih efisien. Saya tidak yakin apa jenis dukungan yang dimiliki Unity untuk hal-hal seperti saya belum pernah menggunakannya, tetapi mungkin ada sesuatu untuk ini sudah dalam deteksi tabrakan atau rendering bagian-bagian mesin.
Pada dasarnya, Anda ingin mengelompokkan musuh yang berdekatan satu sama lain menjadi beberapa bola induk. Ketika sebuah unit dipindahkan, Anda akan memeriksa sphere pemicu terhadap sphere induk alih-alih memeriksa setiap musuh. Jika bola pemicu bersinggungan dengan bola induk, Anda akan memeriksa setiap musuh di dalamnya. Jika tidak, Anda dapat membuang semua musuh yang ada di dalamnya. Anda ingin mengatur beberapa tingkat bola berdasarkan ukuran bola maksimum atau jumlah musuh untuk setiap bola dan melakukan pemeriksaan berdasarkan bola tingkat atas. Maka itu hanya masalah berjalan di pohon untuk memeriksa setiap musuh tanpa perlu melakukan pemeriksaan jarak untuk masing-masing.
Langkah-langkah yang dibutuhkan setiap frame:
- Pindahkan musuh
- Bangun kembali / perbarui BVH untuk posisi musuh baru
- Pindahkan unit dan periksa terhadap sphere-tree.
Ini dapat mengurangi pemeriksaan yang diperlukan ketika ada banyak musuh tetapi overhead memperbarui dan menyimpan pohon mungkin tidak layak ketika ada tidak banyak. Saya tidak terbiasa dengan Panglima Tertinggi untuk mengetahui apa yang Anda cari, jadi saya hanya berasumsi 'ratusan'. Anda harus membuat profil dalam situasi yang berbeda untuk mengetahui apakah biaya overhead akan sepadan dengan Anda.