Betrachten Sie die Bounding Volume Hierarchies (BVH). Sie werden am häufigsten bei der Kollisionserkennung verwendet, um die Anzahl der Überprüfungen zu verringern, die bei der Berechnung von Kollisionen erforderlich sind, oder beim Rendern, um das Ausmerzen von Objekten zu verhindern. Da Sie bereits Kugeln verwenden, würde ich einen Kugelbaum vorschlagen , obwohl andere Volumes wie AABBs möglicherweise effizienter sind. Ich bin mir nicht sicher, welche Unterstützung Unity für solche Dinge hat, wie ich sie noch nie benutzt habe, aber wahrscheinlich gibt es bereits etwas in der Kollisionserkennung oder in der Wiedergabe von Teilen der Engine.
Grundsätzlich möchten Sie Gegner, die sich in der Nähe befinden, in mehrere übergeordnete Bereiche gruppieren. Wenn eine Einheit bewegt wird, überprüfen Sie die Auslösekugel gegen die übergeordnete Kugel, anstatt jeden Feind zu überprüfen. Wenn sich die Triggerkugel mit der übergeordneten Kugel schneidet, überprüfen Sie jeden Feind innerhalb. Wenn dies nicht der Fall ist, können Sie alle darin enthaltenen Feinde ablegen. Sie möchten mehrere Kugelebenen basierend auf der maximalen Kugelgröße oder der Anzahl der Gegner für jede Kugel einrichten und die Prüfung basierend auf einer Kugel der obersten Ebene durchführen. Dann müssen Sie nur noch den Baum hinuntergehen, um jeden Feind zu überprüfen, ohne die Entfernungsprüfung für jeden einzelnen durchführen zu müssen.
Erforderliche Schritte für jeden Frame:
- Bewegen Sie Feinde
- Baue die BVH neu auf / aktualisiere sie für neue feindliche Positionen
- Einheiten bewegen und gegen Kugelbaum prüfen.
Dies kann die Überprüfungen reduzieren, die bei vielen Feinden erforderlich sind, aber der Aufwand für das Aktualisieren und Speichern des Baums lohnt sich möglicherweise nicht, wenn nicht so viele vorhanden sind. Ich kenne Supreme Commander nicht, um zu wissen, wonach Sie suchen, also gehe ich nur von "Hunderten" aus. Sie müssen sich in verschiedenen Situationen profilieren, um herauszufinden, ob sich der Aufwand für Sie lohnt.