Utilice uno de los algoritmos comunes de partición espacial, como un árbol Quadtree, Octree, BSP o incluso un simple sistema de cuadrícula. Cada uno tiene sus propios pros y contras para cada escenario específico. Puede leer más sobre ellos en estos libros .
En general (o eso he oído, no estoy muy familiarizado con el razonamiento detrás de esto), un Quadtree o Octree es más adecuado para entornos al aire libre, mientras que el árbol BSP se adapta mejor a las escenas interiores. Y la elección entre usar un Quadtree o un Octree depende de cuán plano sea su mundo. Si hay poca variación en el eje Y con un Octree sería un desperdicio. Un Octree es básicamente un Quadtree con una dimensión adicional.
Finalmente, no ignore la simplicidad de la solución Grid. Muchas personas ignoran que una cuadrícula simple a veces puede ser suficiente (e incluso más eficiente) para sus problemas, y en su lugar pasan directamente a una solución más compleja.
El uso de una cuadrícula consiste simplemente en dividir el mundo en regiones espaciadas de manera uniforme y almacenar las entidades en la región apropiada del mundo. Luego, dada una posición, encontrar las entidades vecinas sería una cuestión de iterar sobre las regiones que intersectan su radio de búsqueda.
Digamos que su mundo varió de (-1000, -1000) a (1000, 1000) en el plano XZ. Por ejemplo, podría dividirlo en una cuadrícula de 10x10, así:
var grid = new List<Entity>[10, 10];
Luego colocaría entidades en sus celdas apropiadas en la cuadrícula. Por ejemplo, una entidad con XZ (-1000, -1000) caería en la celda (0,0) mientras que una entidad con XZ (1000, 1000) caería en la celda (9, 9). Luego, dada una posición y un radio en el mundo, puede determinar qué celdas están intersectadas por este "círculo" e iterar solo sobre ellas, con un simple doble para.
De todos modos, investiga todas las alternativas y elige la que mejor se adapte a tu juego. Admito que todavía no tengo el conocimiento suficiente sobre el tema para decidir cuál de los algoritmos sería mejor para usted.
Editar Encontró esto en otro foro y podría ayudarlo con la decisión:
Las cuadrículas funcionan mejor cuando la gran mayoría de los objetos encajan dentro de un cuadrado de cuadrícula, y la distribución es bastante homogénea. Por el contrario, los quadtrees funcionan cuando los objetos tienen tamaños variables o están agrupados en áreas pequeñas.
Dada su vaga descripción del problema, también me apoyo en la solución de cuadrícula (es decir, suponiendo que las unidades son pequeñas y están distribuidas de manera bastante homogénea).