Estoy creando un juego usando un mapa de mosaico hecho de miles de cuadrados de cuadrícula. Por el momento, cada cuadrado tiene un colisionador cuadrado para verificar las colisiones.
Sin embargo, con muchos miles de pequeños bloques, verificarlos en busca de colisiones es ineficiente. Si hubiera sabido que el tilemap se vería así de antemano, podría haber usado 3 o 4 colisionadores grandes en lugar de miles de pequeños:
¿Existe algún tipo de algoritmo estándar para combinar muchos mosaicos adyacentes pequeños en los más grandes? Si es así, ¿podría alguien describirlo aquí o señalar literatura sobre tales algoritmos?
Alternativamente, tal vez preprocesar los colisionadores de mosaico de esta manera es un enfoque completamente incorrecto. Si es así, ¿cuál es el correcto para lidiar con la eficiencia de un número extremadamente grande de colisionadores?
fuente
Respuestas:
Encontré útil este algoritmo para el motor love2d ( lenguaje lua )
https://love2d.org/wiki/TileMerging
Aquí sigue el ejemplo de love2d en mi proyecto actual. En rojo puedes ver mis colisionadores de pared.
fuente
Si estás buscando crear un terreno destructible, la forma en que lo hice en Unity es solo colocar colisionadores en los bloques de borde de tu mundo. Entonces, por ejemplo, esto es lo que le gustaría lograr:
Todos esos bloques verdes contienen un colisionador, y el resto no. Eso ahorra una tonelada en cálculos. Si destruye un bloque, puede activar los colisionadores en bloques adyacentes con bastante facilidad. Tenga en cuenta que activar / desactivar un colisionador es costoso y debe hacerse con moderación.
Entonces, el recurso Tile se ve así:
Es un objeto de juego estándar, pero también se puede agrupar. Observe también que el colisionador de cuadros está configurado para deshabilitarse de manera predeterminada. Solo se activaría si se trata de un mosaico de borde.
Si está cargando estáticamente su mundo, no hay necesidad de agrupar sus fichas. Puede cargarlos todos de una sola vez, calcular su distancia desde el borde y aplicar un colisionador si es necesario.
Si está cargando dinámicamente, es mejor usar un grupo de mosaicos. Aquí hay un ejemplo editado de mi ciclo de actualización. Carga mosaicos basados en la vista actual de la cámara:
Idealmente, escribiría una publicación mucho más detallada, ya que hay bastante más detrás de escena. Sin embargo, esto puede ayudarte. Si hay preguntas, no dude en preguntarme o contactarme.
fuente