J'ajouterais ceci en tant que commentaire en réponse à la réponse de @Nathan Reed, sauf qu'il est trop gros pour être un commentaire, et est peut-être en tout cas digne d'être une réponse distincte.
Nous faisions précisément ce qui était proposé dans sa réponse, et en fait nous avons des commentaires dans la source reliant à cette page. Pour la plupart, cela a extrêmement bien fonctionné, sauf qu'une fois tous les deux ou trois mois, nous avons perdu un serveur au hasard qui est devenu non réactif en raison de la durée massive des requêtes de recherche.
La cause première du problème est venue à mon attention lors d'une vérification des performances pour essayer de comprendre la cause de ce problème. Ce n'est probablement une préoccupation que si vous autorisez les objets qui se chevauchent. Dans notre jeu, nous le faisons, et dans le pire des cas, cela conduit parfois à un pic de profondeur qui tue les performances.
Nous avons eu un cas de bord où environ 100 objets, tous avec des disques de délimitation, ont été regroupés à une très grande proximité. Cela a conduit au problème d'un pic très profond dans l'arbre, car nous sommes arrivés au point où les objets étaient plus grands que la zone couverte par les nœuds de l'arbre, donc chaque nouvel objet apparaissait en plusieurs nœuds, conduisant à une subdivision massive du arbre, faisant ainsi boule de neige le problème hors de contrôle.
La conclusion à en tirer est que si vous autorisez les régions d'objets à se chevaucher, gardez un œil attentif sur les choses si vous obtenez des grappes d'objets serrés, pour vous assurer que votre arbre ne soit pas trop profond.
La solution que j'étudie actuellement consiste à stocker des objets sous forme de points, puis lors d'une recherche, augmenter les limites du rectangle de recherche par le rayon maximum stocké dans l'arborescence. Cela devrait fonctionner pour nous, car l'arborescence est une recherche de première passe, nous effectuons ensuite une vérification de la plage basée sur un véritable cercle, ainsi que quelques autres vérifications de critères, de sorte que les fausses alertes supplémentaires seront filtrées.
Votre kilométrage réel peut varier.