Generación procedural de mapas De ASCII a Prefabs
Resumen En este artículo describo el diseño y la implementación de un sistema de generación procedural de mapas desarrollado como vertical slice para un estudio indie. El texto cubre las restricciones iniciales y evolucionadas, el flujo de trabajo desde un prototipo ASCII hasta la generación de prefabs en Unity, la lógica de puertas y habitaciones, y las mejoras propuestas. También incluyo información sobre Q2BSTUDIO empresa especializada en desarrollo de software a medida, aplicaciones a medida, inteligencia artificial, ciberseguridad y servicios cloud aws y azure.
Restricciones clave que guiaron el diseño Para que los mapas fueran jugables y coherentes definimos restricciones que orientaron cada decisión. Inicialmente buscamos simplicidad y robustez. Las restricciones iniciales incluyeron no generar pasillos amplios porque las habitaciones se colocan adyacentes sin espacios intermedios, obligar a que cada habitación ocupe una celda cuadrada n por n y permitir colocación aleatoria de puertas sobre los bordes. Con el tiempo las reglas evolucionaron para fijar la posición de puertas y ofrecer control al diseñador sobre la conectividad y la topología del nivel.
Desafíos resueltos Los mayores retos fueron encajar habitaciones de distintos tamaños en una retícula sin solapamientos, evitar ubicaciones de puertas que resultaran inaccesibles o ilógicas y equilibrar aleatoriedad con la intención de diseño. Estas restricciones permitieron soportar formas complejas de sala y garantizar trazados deterministas cuando era necesario.
Flujo de trabajo paso a paso Comencé con un sistema ASCII para visualizar la retícula de manera rápida y efectiva. Ese prototipo textual facilitó depuración y experimentación. Con una fuente monoespaciada el resultado era claro y reproducible. A partir de ahí implementé colocación aleatoria de habitaciones cuidando que no se superpusieran, lo que estableció la base para el sistema.
Introducción de puertas Al principio las puertas se colocaban al azar sobre los muros pero esto creó problemas de conectividad y esquinas conflictivas. Se añadieron restricciones para impedir puertas en esquinas y reglas para alinear puertas opuestas cuando fuera necesario. Más adelante se pasó de puertas aleatorias a posiciones fijas definidas por plantilla, mejorando la coherencia entre salas y facilitando el trabajo del diseñador.
Transición a prefabs La traducción de coordenadas ASCII a posiciones en el mundo 3D de Unity fue un salto importante. Hubo que ajustar escalados y pivotes para que los muros, suelos y puertas encajaran exactamente. Durante esta fase creé plantillas de habitaciones en Unity que permitieron a diseñadores reutilizar formatos y mantener consistencia visual y jugable.
Refactorización y contenedores de propiedades Refactoricé la lógica de puertas y añadí un contenedor de propiedades para cada habitación que incluye tamaño tipo y posiciones de puertas. Esto permitió cambiar dinámicamente de puertas aleatorias a puertas fijas y añadir metadatos como sala de inicio sala de salida o salas temáticas de puzzle.
Herramientas para diseñadores Para mejorar la usabilidad añadí gizmos e indicadores visuales que representan en el editor las puertas y los espacios transitables tal como aparecen en el mapa ASCII. Así las puertas en la vista ASCII se correspondían con aberturas en los prefabs facilitando ajustes rápidos por parte de diseño.
Elementos temáticos y de juego Incorporé tipos de salas especializadas entradas salidas puzzles y habitaciones de recompensa. Se añadió lógica para definir claramente la sala de inicio y la sala de salida y para clasificar plantillas que sirvan a objetivos concretos del nivel. Esto ayuda a generar mapas con un flujo jugable coherente.
Mejoras previstas Entre las mejoras futuras están optimizar la colocación de habitaciones que actualmente escala en orden n al cuadrado ofrecer gizmos más precisos ampliar la librería de habitaciones permitir rotación de salas e integrar navegación AI mediante nav mesh. También es deseable añadir más herramientas para conectar la generación procedural con sistemas de inteligencia artificial y agentes IA que enriquezcan la experiencia.
Sistema ASCII explicado La representación ASCII funciona como una retícula donde cada carácter simboliza un elemento del mapa. Usamos por ejemplo un símbolo de esquina un símbolo de muro y un símbolo de espacio transitables. La visualización usa una fuente monoespaciada para mantener alineación. El origen de coordenadas se sitúa en la esquina inferior izquierda lo cual simplifica la generación y la conversión a coordenadas matemáticas en Unity.
Tamaños y lógica de muros Cada habitación se define como un bloque cuadrado n por n donde el espacio interior transitables es n menos dos por n menos dos y el área total ocupada en la retícula incluye los muros. En ASCII el grosor de muro es una unidad mientras que en el mundo 3D el muro se escala a 0.5 unidades y el pivote de la esquina inferior izquierda se desplaza para un alineamiento exacto.
Evitar pasillos anchos Al colocar puertas sobre las paredes en la representación ASCII se evita que las conexiones generen pasillos de dos celdas de ancho no deseados y se garantiza un pasillo de un tile cuando corresponde.
Validación de colocación El algoritmo de colocación comprueba primero que la retícula tiene espacio suficiente y luego que las celdas transitables no estén ocupadas. Si la colocación falla se registra el motivo y se omite la sala. Esto evita solapamientos y mantiene la integridad del nivel.
Lógica de puertas y conectividad En el modo aleatorio las puertas se colocan sobre muros evitando esquinas. En el modo de puertas fijas cada plantilla incluye una lista de posiciones válidas. Para colocar una nueva habitación se toma una puerta local se elige una puerta correspondiente de la sala candidata se calcula la posición pivot restando coordenadas y se valida que la sala no colisione con celdas ya ocupadas. Si la validación es correcta la sala se añade y se actualiza la retícula.
Complejidad y optimización Actualmente la comprobación de pares de puertas escala como n al cuadrado respecto al número de puertas por lo que proponemos limitar comprobaciones a puertas en vecindad inmediata indexar puertas por región o categorizar puertas con orientación NSWE para reducir combinatoria. Estas optimizaciones mejorarán rendimiento en niveles con muchas salas.
Ejemplo de flujo Un flujo típico coloca la primera sala en el origen luego para cada puerta abierta se prueban conexiones con otras plantillas calculando pivotes y realizando la validación. Si una sala no cabe se registra y se continúa. Con puertas fijas se obtienen trazados deterministas y previsibles lo que facilita el control de diseño y la creación de formas no rectangulares como salas en L.
Beneficios de puertas fijas Las posiciones fijas ofrecen layouts deterministas soporte para salas con formas complejas y control directo para diseñadores que quieren ajustar conectividad. Esto es especialmente útil cuando se desea integrar contenido narrativo o retos específicos en ubicaciones concretas.
Consideraciones prácticas para integración Para llevar el sistema a producción conviene añadir soporte para navegación de IA generar nav mesh tras el armado del nivel integrar servicios de inteligencia de negocio para analizar métricas de generación y abrir API para agentes IA que puedan modificar topologías en tiempo real. Q2BSTUDIO puede ayudar a integrar estas capacidades ofreciendo soluciones de software a medida que incluyen servicios cloud aws y azure y consultoría en inteligencia artificial y ciberseguridad.
Sobre Q2BSTUDIO Q2BSTUDIO es una empresa de desarrollo de software a medida con experiencia en aplicaciones a medida software a medida y soluciones integradas. Somos especialistas en inteligencia artificial ia para empresas agentes IA y power bi para analítica avanzada. Ofrecemos también servicios de ciberseguridad servicios cloud aws y azure y servicios inteligencia de negocio. Podemos acompañar proyectos de generación procedural desde la arquitectura hasta la integración en entornos productivos garantizando buenas prácticas de seguridad y escalabilidad.
Palabras clave para posicionamiento Aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes IA power bi.
Conclusión La generación procedural de mapas que va del prototipo ASCII a prefabs en Unity permite iterar rápido validar reglas de colocación y ofrecer a diseñadores control sobre la conectividad mediante puertas fijas. Con una implementación robusta y mejoras en rendimiento y herramientas de diseño este enfoque resulta ideal para crear niveles variados y jugables. Si buscas apoyo para llevar esta solución a producción Q2BSTUDIO puede proporcionar desarrollo a medida integración de IA y seguridad y despliegue en servicios cloud aws y azure.