⚡ Inicio Rápido
Configura tu primer mapa hexagonal en minutos siguiendo estos pasos.
✨ Configuración Automática (Recomendado)
- Abre la herramienta Hexagon Map Tool V2 desde el menú de Unity.
- Crea tu primer Layer: Haz clic en el botón
[+]al lado del dropdown de Layers. - Asigna un nombre al layer en la ventana modal (ej: "Terrain", "Buildings", etc.).
- ¡Listo! El sistema creará automáticamente:
- Un Grid con valores por defecto (si no existe uno en la escena)
- Un Layer con el nombre especificado
- Todas las referencias y jerarquía configuradas automáticamente
💡 Métodos Alternativos
- Desde un modelo 3D: Añade el componente
HexagonObjecta cualquier objeto. Esto creará automáticamente un Grid (usando las dimensiones del objeto) y un Layer, configurando toda la jerarquía. - Configuración manual: Si prefieres control total, puedes
crear GameObjects vacíos y añadir los componentes
HexagonGrid3DyHexagonTileLayermanualmente. Ver detalles en la sección Componentes Técnicos.
📦 Paso 1: Preparar el Modelo 3D
- Importa tu modelo a la carpeta
Assets/. - ⚠️ Verifica la orientación:
⚠️ Importante: El modelo debe verse correctamente orientado cuando su rotación está en
(0, 0, 0).Problema común: Algunos modelos importados tienen rotaciones incorrectas (ej: Y=-90°) y algunos desarrolladores compensan rotando el objeto en Unity.
❌ Esto causa problemas porque la herramienta usa rotación (0,0,0) como base para cálculos hexagonales y rotaciones del mesh.
✅ Solución recomendada: Corrige la orientación del modelo en tu software de modelado 3D.
🔧 Solución alternativa: Si no puedes modificar el modelo:
- Crea un GameObject vacío con
rotación
(0, 0, 0) - Añade el componente
HexagonObjectal objeto vacío - Coloca el modelo como hijo del objeto vacío
- Rota el modelo hijo para corregir su orientación
- Crea un GameObject vacío con
rotación
- Pivote del modelo:
- Recomendado: Pivote en la base inferior bien centrado
- No obligatorio: La herramienta permite ajustar el offset del pivote si es necesario
🔧 Paso 2: Configurar el HexagonObject
- Arrastra el modelo a la escena (o crea el GameObject vacío si usas la solución alternativa)
- Añade el componente
HexagonObject - Configura las propiedades:
Pivot Offset: Ajusta si el pivote no está centrado (automático con botón Calculate Properties)Height Cells: Cuántas celdas hexagonales de altura ocupa este objetoIs Stackable: Permite que otros objetos se apilen encimaIs Hexagon Prop: Marca como decorativo (árboles, rocas). El pincel lo ignorará excepto con el borradorRequires Floor: Requiere un objeto sólido debajo para ser colocado (excepto a nivel del suelo)
- Tip: Usa el botón
Calculate Propertiesen el menú contextual del componente para calcular automáticamente el Pivot Offset y Height Cells - Crea un prefab arrastrando el objeto a tu carpeta de Prefabs
- (Opcional) Organiza tus prefabs en subcarpetas según tu preferencia
🎨 Paso 3: Añadir el Prefab como Pincel
💡 Recomendación: La primera vez, crea una nueva
paleta antes de añadir pinceles. Haz clic en el botón [+] que está
al lado del dropdown de paletas en Drawing Palettes.
Método 1: Arrastrar y Soltar (Rápido)
- Abre la herramienta Hexagon Map Tool V2, ve al tab Tools
- Arrastra tu prefab al botón verde de Drawing Palettes
- Se abrirá un modal para crear un nuevo pincel con tu prefab
- (Opcional) Añade más prefabs al pincel:
- Haz clic en el botón verde
[+]del modal o arrastra más prefabs en el mismo para crear variaciones - Esto permite usar patrones como Random para distribuir las variantes
- Haz clic en el botón verde
- Haz clic en Crear
Método 2: Botón [+] (Detallado)
- Haz clic en el botón verde
[+]de Drawing Palettes - Se abrirá el modal de crear pincel (vacío)
- Para añadir prefabs tienes dos opciones:
- Arrastrar: Arrastra tu prefab al botón
[+]del modal - Seleccionar: Haz clic en el botón
[+]del modal → se abrirá una lista de todos los HexagonObjects válidos en tu proyecto → selecciona el que desees
- Arrastrar: Arrastra tu prefab al botón
- Haz clic en Crear
💡 Nota sobre la Paleta Default
Si intentas crear un pincel mientras estás en la paleta Default, el sistema te pedirá que crees una nueva paleta primero. Simplemente introduce el nombre de tu nueva paleta en el modal que aparecerá.
🎨 Cómo Usar los Pinceles
Una vez que hayas creado tu paleta con éxito, verás los pinceles disponibles en el panel de Drawing Palettes.
Seleccionar un Pincel
- Haz clic en un pincel para seleccionarlo. Se resaltará en verde indicando que está activo.
- Para deseleccionar: Haz clic nuevamente en el pincel
resaltado o presiona la tecla
ESC.
Pintar en la Escena
- Con un pincel seleccionado, mueve tu cursor a la Scene View
- Haz clic en una celda hexagonal para instanciar el objeto
- Arrastra el cursor mientras mantienes presionado el botón para pintar múltiples celdas
- Usa Ctrl+Z para deshacer acciones si es necesario
🎨 Interfaz: Tabs del Editor
El editor se divide en 4 tabs principales, cada uno con funciones específicas.
🖌️ Tools Tab: Herramientas de Pintura
Configuración del pincel y gestión de paletas para pintar en el mapa hexagonal.
⚠️ Requisitos para Usar las Herramientas
El tab se deshabilita automáticamente en estas situaciones:
- No hay Layer seleccionado: Muestra botón "Crear Layer" para solucionar.
- Layer deshabilitado en jerarquía: Muestra botón "Fix now" para habilitarlo automáticamente.
- Layer marcado como no visible: Muestra botón "Fix now" para hacerlo visible.
Define cómo se colocan los objetos en el mapa. Se selecciona mediante toolbar de 4 opciones.
Default
Pinta en altura fija especificada. El sistema busca automáticamente la primera altura libre desde la celda apuntada hacia arriba.
- Uso: Construcción general con control manual de altura.
- Parámetros activos: Floor Cell, Altura de Pincel.
- Comportamiento del radio: Expande horizontalmente según BrushSize desde el centro encontrado.
- Altura de Pincel: Multiplica capas verticalmente. La separación entre capas se calcula usando el HeightCells del prefab más bajo del brush.
- Durante arrastre: Mantiene la altura inicial del primer clic para pintar plano.
Over Level
Detecta la superficie de cada celda y pinta encima. Cada posición horizontal calcula su propia altura independientemente.
- Uso: Añadir capas sobre terreno irregular, apilar estructuras respetando desniveles.
- Parámetros activos: Floor Cell, Altura de Pincel.
- Detección de superficie: Si la celda está ocupada, sube hasta encontrar espacio libre. Si está vacía, baja hasta encontrar suelo o alcanzar FloorCell.
- Adaptación al terreno: Perfecto para seguir contornos naturales del mapa.
- Altura de Pincel: Apila capas verticalmente desde la superficie detectada.
Flatten
Elimina terreno superior y rellena desde el Floor Cell hasta la altura objetivo, creando superficie plana.
- Uso: Crear plataformas planas, nivelar terreno irregular.
- Parámetro activo: Floor Cell (no usa Altura de Pincel).
- Proceso de
aplanamiento:
- Elimina objetos por encima de la altura objetivo
- Rellena desde FloorCell hasta la altura objetivo
- Opciones de
remoción:
- Remover vecinos directos (activado): Elimina TODO por encima, sin límite de altura.
- Rango de remoción (desactivado lo anterior): Solo elimina hasta una altura máxima específica. Si es 0, no elimina nada (solo rellena).
💡 Ejemplo práctico: Para crear una plataforma en altura 5 sin destruir construcciones altas (edificios en altura 10+), desactiva "Remover vecinos directos" y establece "Rango de remoción" en 7. Así limpia hasta altura 12 (5+7) pero respeta edificios más altos.
Fill Volume
Rellena completamente el volumen tridimensional desde el Floor Cell hasta la celda apuntada, capa por capa.
- Uso: Crear montañas, colinas, pilares, terraformado masivo.
- Parámetro activo: Floor Cell (no usa Altura de Pincel).
- Cálculo de capas: TotalCapas = CeldaApuntada.Y - FloorCell + 1
- Separación vertical: Usa el HeightCells del prefab más pequeño del brush.
- Ejemplo: Si FloorCell=0 y apuntas a Y=5, rellena las capas 0, 1, 2, 3, 4 y 5 (6 capas totales).
- Importante: Respeta RequiresFloor de los prefabs - solo coloca objetos si tienen suelo debajo.
Opción Global
- Reemplazar Existentes: Si está activado, elimina objetos en cada celda antes de pintar. Si está desactivado, detecta ocupación y respeta objetos ya colocados (no sobrescribe).
⚠️ Colisiones entre Layers: El sistema verifica colisiones entre layers usando la Collision Matrix del Grid Tab. Si dos layers tienen colisión deshabilitada, pueden coexistir en la misma celda.
Controla el área horizontal de pintado (radio en hexágonos).
Radio de Pintado
- Valores: 0 = solo centro, 1 = centro + 6 vecinos, 2+ = anillos adicionales.
- Control: Slider con límites configurables (mín/máx colapsables).
- Shortcuts:
+/-para aumentar/disminuir. - Preview: Se visualiza en la Scene View con gizmo.
Configura la altura del pintado en el mapa.
Floor Cell
- Función: Altura base del layer actual, sincronizado automáticamente con HexagonTileLayer.
- Comportamiento: Solo editable cuando hay un layer seleccionado.
- Límites: Se ajustan automáticamente al valor del layer para evitar restricciones.
- Uso: Define desde dónde comienza el terreno del layer.
Altura de Pincel (solo Default y Over Level)
- Función: Número de capas verticales pintadas simultáneamente.
- Importante: Cada capa respeta la altura (HeightCells) de los prefabs.
- Separación entre capas: Se calcula multiplicando por el HeightCells del prefab más pequeño del brush.
- Ejemplo: Con BrushHeight=3 y prefabs de HeightCells=2, crea capas en Y=0, Y=2, Y=4 (6 celdas verticales totales).
- Límites configurables: Mín/máx expandibles en foldout.
Controla la orientación de los objetos al pintarlos.
Rotación Aleatoria
- Toggle: Activa/desactiva rotaciones aleatorias.
- Ángulos Permitidos: Selecciona qué ángulos usar (0°, 60°, 120°, 180°, 240°, 300°).
- Restricción: Mínimo 2 ángulos deben estar seleccionados.
- Uso: Crear variedad natural en decoración y vegetación.
Rotación Fija (si aleatoria está desactivada)
- Slider: Define ángulo exacto para todos los objetos.
- Valores: Múltiplos de 60° (0°, 60°, 120°, 180°, 240°, 300°).
- Shortcuts:
Alt + Scrollpara rotar en Scene View.
Define cómo se distribuyen los prefabs del brush seleccionado dentro del área de pintado.
Patrones Disponibles
- Random: Selección aleatoria de prefabs en cada celda. Funciona con cualquier cantidad de prefabs.
- Sequential: Coloca prefabs en orden secuencial (0→1→2→0...). Funciona con cualquier cantidad.
- Alternating Ring: Alterna prefabs por anillos concéntricos desde el centro. Requiere exactamente 2 prefabs. Durante arrastre mantiene el centro fijo.
- Diagonal: Crea patrón diagonal alternando 2 prefabs según la suma de coordenadas (X+Z). Requiere exactamente 2 prefabs.
- Stripe: Genera franjas horizontales paralelas (dirección eje Z). Requiere mínimo 2 prefabs. Durante arrastre mantiene el centro fijo.
- Border Only: Pinta solo el perímetro del brush, dejando el centro vacío. Funciona con cualquier cantidad de prefabs.
💡 Rotaciones por celda: Si "Rotación Aleatoria" está activa, cada celda 3D (x,y,z) tiene su propia rotación única, incluso en diferentes capas verticales de la misma posición horizontal.
Restaura toda la configuración del pincel a sus valores por defecto.
- Ubicado en la esquina superior derecha del panel de configuración.
- Afecta: Modo, Tamaño, Altura, Rotación y Patrón.
Sistema de gestión de pinceles organizados en paletas.
Selector de Paleta y Controles
- Dropdown: Lista de todas las paletas disponibles en el proyecto.
- Opción "[+] Nueva Paleta": Última opción del dropdown, abre ventana de creación.
- Persistencia: La última paleta seleccionada se guarda automáticamente en EditorPrefs.
Botones de Gestión de Paletas
[+] |
Crear Paleta: Abre ventana modal para definir nombre. La paleta se crea automáticamente en la carpeta correcta del proyecto. |
↻ |
Actualizar: Refresca la lista de paletas desde el proyecto. Útil si se añadieron/eliminaron paletas manualmente. |
| Renombrar | Renombrar Paleta: Abre ventana modal para cambiar el nombre. Deshabilitado para paleta "Default". |
| Eliminar | Eliminar Paleta: Borra la paleta del proyecto (solicita confirmación). Deshabilitado para paleta "Default". |
⚠️ Restricción: La paleta "Default" no puede ser renombrada ni eliminada. Los botones se deshabilitan automáticamente cuando está seleccionada.
Lista de Brushes
- Visualización: Scroll vertical con previsualizaciones de todos los brushes de la paleta activa.
- Eraser especial: Primer item de la lista (índice -1), siempre disponible para borrar objetos.
- Drag & Drop: Arrastra prefabs HexagonObject desde Project directamente sobre el área de brushes para crear uno nuevo rápidamente.
- Botón Quick Add (+): Zona verde al final de la lista para añadir brushes haciendo click o arrastrando prefabs.
Estado de selección del brush:
-2= Ninguno seleccionado (no se puede pintar)-1= Eraser activo (borrador)≥0= Brush válido seleccionado (listo para pintar)
Shortcuts de Navegación
Q |
Seleccionar brush anterior |
E |
Seleccionar siguiente brush |
R o Backspace |
Toggle eraser (activar/desactivar borrador) |
ESC |
Deseleccionar brush actual (vuelve a estado -2) |
Gestión de Brushes
- Añadir (+): Botón verde al final de la lista, crea nuevo brush vacío en la paleta.
- Editar (icono lápiz): Abre ventana de edición del brush seleccionado para modificar nombre y prefabs.
- Eliminar (-): Borra el brush seleccionado de la paleta (solicita confirmación).
- Validación automática: Si el brush seleccionado contiene prefabs null, muestra warning con botón "Fix" para limpiar todos los brushes de la paleta automáticamente.
💡 Método Avanzado:
Aunque puedes crear paletas
manualmente con Create → Hexagon Map Tool → Palette en el
Project, el botón [+] es más rápido y garantiza que se
guarden en la ubicación correcta del proyecto.
📐 Grid Tab: Configuración de la Cuadrícula
Gestiona las propiedades del grid hexagonal y las interacciones entre layers.
Muestra información detallada del grid hexagonal seleccionado.
Información del Grid
- Nombre: Identificador del grid.
- Geometría
Hexagonal:
- Radius: Distancia del centro a los vértices del hexágono.
- Apothem: Distancia del centro al punto medio de un lado.
- Height: Altura vertical de cada nivel hexagonal.
- Side Length: Longitud de cada lado.
- Configuración de Celda: Tipo de coordinadas (CellSwizzle).
- Grid Position: Posición del grid en la escena.
- Cell Gap: Espaciado entre celdas hexagonales.
Acciones
- Editar: Abre el Inspector enfocado en el grid para modificar sus propiedades.
Define qué layers pueden coexistir en las mismas celdas hexagonales.
Cómo Funciona
- Checkbox Marcado
(✓): Los
layers COLISIONAN - los objetos NO pueden superponerse en la misma
celda.
- Ejemplo: Terrain ↔ Water marcado = el agua no puede colocarse sobre terreno.
- Checkbox Desmarcado (
): Los
layers NO colisionan - los objetos SÍ pueden superponerse.
- Ejemplo: Terrain ↔ Decoration desmarcado = permite colocar decoración sobre terreno.
- Por defecto: Todas las combinaciones están marcadas (todas colisionan).
Casos de Uso
- Evitar superposición de terreno y agua
- Permitir decoración sobre tiles de piso
- Controlar qué elementos pueden apilarse en la misma posición
Detección de Conflictos
- Contador Automático: El sistema detecta objetos superpuestos que violan las reglas de la matriz.
- Botón "Seleccionar": Navega cíclicamente entre objetos conflictivos para resolverlos fácilmente.
- Excepción: Objetos con IsStackable=true no generan conflictos.
Acciones
- Botón Reset: Restaura todas las colisiones al estado por defecto (todas marcadas).
Lista de todas las layers del grid seleccionado con controles rápidos.
Controles por Layer
- Checkbox Enable/Disable: Activa/desactiva el GameObject completo de la layer.
- Toggle Visibilidad: Muestra/oculta todos los objetos de la layer en la Scene View.
- Modo Gizmo:
Alterna entre mostrar
los meshes 3D normales o solo wireframes hexagonales.
- Útil para visualizar la ocupación de celdas sin distracciones visuales.
- Usa el color base de la layer para todos los objetos.
- Color Picker: Asigna un color a la layer para identificarla en modo gizmo.
- Botón Nombre: Selecciona la layer en la jerarquía. Muestra la cantidad de objetos que contiene.
La layer actualmente seleccionada se resalta visualmente en la lista.
🗂️ Layer Tab: Gestión de Capas
Administra objetos en cada layer individual, con herramientas de análisis, catálogo visual y transferencia de datos.
Muestra información en tiempo real sobre el contenido y estado del layer seleccionado.
Información Disponible
- Nombre del Layer: Identificador de la capa actual.
- Objetos Registrados: Cantidad total de objetos en el layer.
- Celdas Ocupadas: Número de celdas hexagonales utilizadas (un objeto puede ocupar múltiples celdas según su altura).
- Conflictos Detectados: Identifica celdas con objetos superpuestos. Cuando hay conflictos, aparece un botón "Seleccionar" para navegar entre ellos y resolverlos fácilmente.
Acciones
- Actualizar: Reconstruye el registro del layer desde la jerarquía. Útil cuando los objetos fueron modificados externamente o si hay inconsistencias en el sistema.
- Editar: Abre el Inspector enfocado en el layer para modificar sus propiedades directamente.
Lista visual de todos los objetos del layer, agrupados por tipo de prefab para facilitar su gestión.
Información por Prefab
- Color Identificador: Asigna un color único a cada tipo de prefab para identificarlos rápidamente en la escena con gizmos y wireframes.
- Preview del
Prefab: Miniatura visual del
objeto.
- Click: Abre ventana para reemplazar todas las instancias por otro prefab.
- Drag & Drop: Arrastra un prefab sobre el preview para reemplazarlo directamente.
- Al reemplazar, el sistema valida propiedades (Height, Stack, IsProp, RequiresFloor) y advierte sobre incompatibilidades.
- Propiedades del Objeto: Muestra Height, Stack, Is Prop y Requires Floor para identificar rápidamente el comportamiento del objeto.
- Contador: Cantidad de instancias de este prefab en el layer.
Controles Disponibles
- Seleccionar Todos: Selecciona todas las instancias en el Hierarchy para editarlas o inspeccionarlas en conjunto.
- Toggle Visibilidad: Muestra/oculta todas las instancias de este prefab en la Scene View.
- Modo Gizmo:
Alterna entre
mostrar los meshes completos o solo wireframes hexagonales.
- Útil para visualizar la ocupación de celdas sin el ruido visual de los modelos 3D.
- Puede combinarse con visibilidad para ver wireframes sin meshes.
- Eliminar Todos: Elimina todas las instancias de este prefab (solicita confirmación).
El catálogo se oculta cuando hay un preview de importación activo.
Exportar Layer
Guarda el layer completo en un archivo JSON que puede ser compartido o reutilizado en otras escenas.
- Qué se exporta: Posiciones, rotaciones, referencias a prefabs, configuración del layer y geometría del grid.
- Actualización automática: El nombre del layer se actualiza al nombre del archivo exportado.
- Formato JSON: Archivo legible que puede editarse manualmente si es necesario.
Importar Layer
Carga datos desde un archivo JSON previamente exportado.
⚠️ IMPORTANTE: El import elimina todos los objetos existentes en el layer antes de cargar los nuevos. Si hay objetos, solicita confirmación.
- Preview
Obligatorio: Antes de cargar, se
muestra un preview que permite:
- Revisar qué objetos se van a crear
- Reasignar prefabs faltantes
- Cancelar la operación si algo no es correcto
- Validación: El sistema verifica que todos los prefabs existan o puedan ser reemplazados.
Sistema de preview que te permite revisar y modificar los datos antes de confirmar la importación.
Vista en Escena
- Gizmos de Preview: Los objetos a importar se visualizan en sus posiciones exactas con gizmos hexagonales, permitiendo verificar que todo esté correcto antes de crear los objetos reales.
Panel de Preview
- Estadísticas: Muestra cuántos objetos y prefabs diferentes se van a importar.
- Lista de Prefabs: Detalla todos los prefabs necesarios y sus cantidades.
- Reasignación de Prefabs: Si falta algún prefab o deseas usar uno diferente, puedes reasignarlo antes de importar.
- Validación: Indica claramente qué prefabs están disponibles y cuáles necesitan atención.
Acciones Disponibles
- Cancelar: Descarta la importación y cierra el preview.
- Cargar: Ejecuta la importación y selecciona automáticamente todos los objetos creados.
El preview se cancela automáticamente al cambiar de layer o de tab.
⚙️ Options Tab: Configuración y Preferencias
Ajustes generales del editor, idioma, apariencia del pincel, atajos y recursos de ayuda.
Idioma / Language
Selector de idioma para la interfaz del editor.
- Español (es) - Spanish
- English (en) - English
- 日本語 (ja) - Japanese (AI-translated)
Los cambios se aplican inmediatamente y repintan todas las ventanas del editor.
Nota: La traducción al japonés es generada por IA y puede contener expresiones no naturales.
Interfaz / UI Settings
- Mostrar encabezado: Muestra/oculta el encabezado con el nombre de la herramienta en la parte superior de la ventana.
- Mostrar mensajes de ayuda: Activa/desactiva información de ayuda y tooltips detallados en la interfaz.
Apariencia del Pincel
- Modo de
Visualización: Selecciona cómo se
visualiza el brush en la escena:
- Default: Muestra el gizmo con mesh semi-transparente
- Wireframe: Solo muestra el contorno del hexágono
- Solid: Muestra el mesh sólido del brush
- Color del pincel: Color del gizmo hexagonal del pincel en la escena.
- Color de rotación: Color de la línea que indica la rotación del pincel.
- Color de conflicto: Color para indicar posiciones conflictivas (cuando no se puede colocar un objeto).
- Color de celda apuntada: Color de la celda actualmente apuntada por el cursor.
- Color de eliminación: Color del brush cuando está en modo borrador.
Debug
- Mostrar Bounds de
Colisión: Visualiza los bounds
hexagonales virtuales en la escena:
- Azul: Hexágonos del layer
- Rojo: Hexágono detectado por el raycast
- Amarillo: Ray desde la cámara
- Verde: Punto de colisión
- Mostrar mensajes de debug: Registra información de depuración en la consola (útil para desarrollo).
Restablecer Configuración
Botón para restaurar todos los ajustes a sus valores predeterminados.
Lista de atajos de teclado disponibles para agilizar tu flujo de trabajo.
Selección de Pinceles
| Atajo | Acción |
|---|---|
Q |
Pincel anterior |
E |
Pincel siguiente |
R / Backspace |
Alternar borrador (activar/desactivar) |
ESC |
Deseleccionar pincel |
Tamaño del Pincel
| Atajo | Acción |
|---|---|
+ / - |
Aumentar/Disminuir tamaño del pincel |
Ctrl + Scroll |
Cambiar tamaño con rueda del ratón |
Rotación del Pincel
| Atajo | Acción |
|---|---|
Alt + Scroll |
Cambiar rotación con rueda del ratón |
Esta sección proporciona botones con enlaces directos a Discord, YouTube y un botón para copiar el email de contacto.
Tu opinión es importante. Comparte errores o sugerencias a través de nuestros canales de comunicación.
Todos los enlaces de contacto también están disponibles en el footer de esta página.
Muestra información básica sobre Hexagon Map Tool V2 (versión 2.0.0) e incluye un botón que abre una ventana con información detallada completa sobre la herramienta.
🧩 Componentes Técnicos
Componentes principales de Unity que debes conocer para usar la herramienta.
Propósito: Componente que convierte cualquier GameObject en un objeto hexagonal válido para el sistema.
Grid Integration
Parent Layer Reference: Referencia al HexagonTileLayer donde se registraCell Coordinate: Coordenada de la celda hexagonal que ocupaParentGrid: Referencia de solo lectura al HexagonGrid3D padre (accesible vía el TileLayer)
Cell Properties
Pivot Offset: Ajuste del pivote del objeto (se calcula automáticamente)Height Cells: Cuántas celdas hexagonales de altura ocupa (1 por defecto)Is Stackable: Permite que otros objetos se apilen encimaIs Hexagon Prop: Marca el objeto como decorativo (árboles, rocas, etc.)Requires Floor: Requiere objeto sólido debajo para ser colocadoRotation Index: Índice de rotación (0–5) en incrementos de 60°. 0=0°, 1=60°, 2=120°, 3=180°, 4=240°, 5=300°
Métodos Públicos
CalculateProperties(): Calcula automáticamente Pivot Offset y Height Cells basándose en el modelo 3DDoSnapToGrid(): Alinea el objeto a la celda hexagonal más cercana del gridSnapRotation(): Redondea la rotación Y al múltiplo de 60° más cercano y actualizaRotationIndexApplyRotationFromIndex(): Aplica la rotación en el Transform para que coincida con el valor actual deRotationIndexMoveTo(Vector3Int cellCoord): Mueve el objeto a una coordenada de celda específicaChangeLayer(HexagonTileLayer newLayer): Cambia el objeto a un layer diferenteRegisterInLayer(): Registra manualmente el objeto en su layer asignadoUnregisterFromLayer(): Desregistra el objeto de su layer actual
Uso en Runtime
- Usa
DoSnapToGrid()para alinear objetos movidos dinámicamente - Usa
MoveTo()para mover objetos entre celdas durante el juego - Accede a
CellCoordinatepara saber en qué celda está el objeto - Usa
SnapRotation()tras rotar un objeto en runtime para mantener el índice sincronizado
Propósito: Define la geometría y parámetros del grid hexagonal 3D que sirve como base para todo el mapa.
Grid Geometry
Radius (R): Distancia del centro a cualquier vértice del hexágonoApothem (A): Distancia del centro al punto medio de cualquier ladoHeight (H): Altura del prisma hexagonal (distancia entre niveles)Side Length: Longitud del lado del hexágono (calculado automáticamente)
Cell Configuration
Cell Gap: Espacio adicional entre celdasCell Swizzle: Configuración de ejes espaciales (XYZ, XZY, etc.)
Debug & Visualization
Show Grid: Muestra/oculta el grid en Scene ViewGrid Color: Color de las líneas del gridShow Coordinates: Muestra coordenadas hexagonales en Scene ViewNeighbor Radius: Radio de vecinos a mostrar en debugHeight Range: Rango de altura a mostrar en debug
Métodos Públicos
WorldToCell(Vector3 worldPos): Convierte posición del mundo a coordenadas de celda hexagonalCellToWorld(Vector3Int cellPos): Convierte coordenadas de celda a posición del mundoGetCellCenterWorld(Vector3Int cellPos): Obtiene el centro de una celda en coordenadas del mundoGetHorizontalNeighbors(Vector3Int center, int range): Obtiene vecinos en el plano horizontalGetVerticalNeighbors(Vector3Int center, int range): Obtiene vecinos en el eje verticalGetNeighbors3D(Vector3Int center, int hRange, int vRange): Obtiene vecinos en un volumen 3D
Uso en Runtime
- Usa
WorldToCell()para convertir posiciones de mouse/raycast a celdas - Usa
GetNeighbors3D()para encontrar celdas adyacentes (movimiento, rango de ataque, etc.) - Usa
CellToWorld()para posicionar objetos en celdas específicas
Propósito: Administra una capa de objetos sobre el grid. Cada layer representa un nivel o categoría de objetos (terreno, edificios, decoración, etc.).
Layer Configuration
Hexagon Grid Reference: Referencia al HexagonGrid3D asociadoFloor Cell: Nivel base donde se colocan objetos por defecto (puede ser negativo para capas subterráneas)
Gizmos Visualization
Base Gizmo Color: Color del plano base hexagonal en los gizmos de Scene View
Layer Statistics (Solo lectura)
Occupied Cells: Número de celdas ocupadas en esta capaTotal Objects: Número total de objetos en esta capa
Métodos Públicos
IsCellOccupied(Vector3Int cellCoord): Verifica si una celda está ocupadaGetCellOccupants(Vector3Int cellCoord): Obtiene todos los objetos en una celda específicaGetStackingHeight(Vector3Int cellCoord): Calcula la altura para apilar el siguiente objetoGetAllOccupiedCells(): Obtiene lista de todas las celdas ocupadasGetCellWorldPosition(Vector3Int cellCoord): Convierte coordenada de celda a posición del mundoRegisterCellOccupant(Vector3Int cellCoord, HexagonObject obj): Registra un objeto en una celdaUnregisterCellOccupant(Vector3Int cellCoord, HexagonObject obj): Desregistra un objeto de una celdaCleanupNullReferences(): Limpia referencias nulas del registroRebuildFromHierarchy(): Reconstruye el registro desde la jerarquía de objetos
Uso en Runtime
- Usa
IsCellOccupied()para verificar si puedes colocar algo en una celda - Usa
GetCellOccupants()para obtener todos los objetos en una posición (útil para interacciones) - Usa
GetAllOccupiedCells()para iterar sobre todos los objetos del mapa
❓ Preguntas Frecuentes
No. El componente HexagonObject es
obligatorio para que el sistema reconozca y gestione los objetos
correctamente.
Razón: El componente define propiedades esenciales como Height Cells, Stack Priority, Requires Floor y si es Prop, que el sistema necesita para calcular colisiones, apilamientos y comportamientos de pintado.
Solución: Añade el componente a todos los prefabs antes de usarlos en paletas. Usa el botón "Calculate Properties" para configuración automática basada en la geometría del modelo.
Verifica que el punto de pivote del modelo esté en la base central del objeto, no en el centro geométrico.
Solución ideal: En tu software de modelado 3D (Blender, Maya, etc.), ajusta el pivot point antes de exportar. En Unity no se puede cambiar fácilmente el pivot de un modelo importado.
Solución en Unity - PivotOffset: El componente HexagonObject tiene un
parámetro PivotOffset que permite compensar la posición sin modificar
el modelo. Ajusta los valores X, Y, Z en el Inspector para corregir el
offset.
Alternativa avanzada: Crea un GameObject vacío, coloca el modelo como hijo, y ajusta su Transform local para compensar el offset del pivot. Añade el componente HexagonObject al padre vacío.
⚠️ Rotación incorrecta: Para problemas de rotación, PivotOffset
no ayuda. Debes corregir la orientación en tu software 3D o usar el truco del
GameObject vacío con rotación local ajustada.
Causas comunes y soluciones:
- Registro desincronizado: Haz clic en el botón "↻ Actualizar" al lado del dropdown de Layer selection. Esto reconstruye el registro de ocupación desde la jerarquía.
- Objetos ocultos: Ve al Layer Tab → Object Catalog y verifica que ningún grupo esté oculto con el toggle de visibilidad. Los objetos invisibles siguen ocupando celdas.
- HexagonObject invisible: Puede haber un GameObject con componente HexagonObject pero sin modelo 3D visible. Busca en el Hierarchy del layer objetos sospechosos.
- Props y Stackables:
IsHexagonProp = true: El objeto bloquea la ocupación a objetos encima de él. Perfecto para elementos decorativos.IsStackable = true: Permite que múltiples objetos con esta propiedad activa puedan ocupar la misma celda simultáneamente. Útil para combinar elementos decorativos.
Alturas diferentes: Sí. Usa la propiedad HeightCells del
componente HexagonObject para definir cuántas celdas verticales ocupa cada prefab
sobre la geometría base del grid.
Dimensiones horizontales diferentes: No en el mismo grid. Cada HexagonGrid3D tiene geometría fija (Cell Radius, Cell Height) que define el tamaño base de todas las celdas hexagonales.
Solución para múltiples dimensiones: Crea múltiples HexagonGrid3D en la escena, cada uno con sus propias dimensiones. Cada grid puede tener sus propios layers independientes.
Usa la Collision Matrix en el tab Grid para controlar las interacciones entre layers.
Funcionamiento:
- Marcado (✓): Los layers colisionan - NO pueden superponerse en la misma celda
- Desmarcado ( ): Los layers NO colisionan - SÍ pueden compartir celdas
Pasos para configurar:
- Ve a Grid Tab → Collision Matrix
- Localiza la intersección entre los layers que quieres configurar
- Marca/desmarca según necesites
💡 Ejemplo práctico - Layers estacionales:
- Layer 1 "Terrain Base": Forma del terreno (montañas, valles)
- Layer 2 "Verano":
- Colisión activada con Layer 1 (pinta sobre el terreno)
- Usa hexágonos de pasto verde y pradera colorida
- Layer 3 "Invierno":
- Colisión desactivada con Layer 2 (ignora el verano)
- Colisión activada con Layer 1 (trabaja sobre la misma forma de terreno)
- Usa hexágonos de nieve y paisaje invernal
Resultado: Puedes activar/desactivar los layers estacionales en el Hierarchy para cambiar entre verano e invierno manteniendo la misma forma de terreno.
Define si el objeto necesita suelo debajo para ser colocado. Usado principalmente en modo Fill Volume.
- RequiresFloor = true: Solo se coloca si hay otro objeto directamente debajo. Ideal para edificios, árboles, decoración.
- RequiresFloor = false: Se puede colocar en el aire. Ideal para terreno base, plataformas flotantes, nubes.
Uso práctico: Al rellenar un volumen con Fill Volume, el sistema verifica automáticamente esta propiedad para evitar decoración flotante sin base.
Limitación: La herramienta instancia objetos reales en la escena. Miles de GameObjects pueden causar problemas de rendimiento en editor y runtime.
Estrategias recomendadas:
- Escenarios pequeños/modulares: Divide el mundo en secciones más pequeñas (chunks) y carga/descarga según la posición del jugador.
- Técnicas de optimización:
- Static Batching para objetos inmóviles
- GPU Instancing para objetos idénticos
- LODs (Level of Detail) para reducir complejidad a distancia
- Occlusion Culling para ocultar geometría no visible
- Sistema de streaming: Exporta layers a JSON (botón Exportar en Layer
Tab) y crea un sistema custom que:
- Carga datos de posiciones desde JSON
- Usa Object Pooling para reutilizar instancias
- Solo instancia hexágonos visibles por la cámara
- Destruye/desactiva hexágonos fuera de rango
💡 Recomendación: Diseña primero el escenario completo en el editor para tener la visión general, luego implementa streaming/chunking para runtime si es necesario.
Usa la función de Exportar/Importar en el Layer Tab:
Exportar:
- Ve a Layer Tab → Data Management → Exportar Layer
- Guarda el archivo JSON en una ubicación accesible
- El JSON contiene: posiciones, rotaciones, referencias a prefabs, configuración del layer y geometría del grid
Importar:
- En la escena destino, crea un HexagonGrid3D con las mismas dimensiones
- Crea un Layer o selecciona uno existente
- Ve a Layer Tab → Data Management → Importar Layer
- Selecciona el archivo JSON
- Revisa el Preview Obligatorio para reasignar prefabs faltantes
- Confirma la importación
⚠️ Importante: El import elimina todos los objetos existentes en el layer antes de cargar. Siempre solicita confirmación si hay datos.
No. Hexagon Map Tool V2 es una herramienta de editor solamente (Edit Mode).
Diseño: Está pensado para construir y diseñar mapas hexagonales durante el desarrollo, no para permitir edición dinámica durante el juego.
En Runtime: Los objetos creados son GameObjects normales que existen en la escena. Puedes acceder a ellos mediante código, pero no puedes usar las herramientas de pintado/edición.
Si necesitas edición en runtime: Los componentes (HexagonGrid3D, HexagonTileLayer, HexagonObject) tienen APIs públicas que puedes usar para crear tu propio sistema de edición en runtime.
Usa un brush con múltiples variantes del mismo tipo de objeto.
Técnica:
- Crea 3-5 variantes del mismo elemento (ej: césped con flores diferentes)
- Añádelas todas al mismo brush
- Selecciona el patrón Random en Patrón de Distribución
- Activa Rotación Aleatoria y permite varios ángulos
Resultado: El sistema distribuirá aleatoriamente las variantes con diferentes rotaciones, creando apariencia orgánica y natural.
💡 Tip avanzado: Combina esto con el modo Over Level para que la decoración se adapte automáticamente a las irregularidades del terreno.
Los patrones definen cómo se distribuyen los prefabs del brush dentro del área de pintado.
| Random | Cualquier cantidad. Selección aleatoria en cada celda. |
| Sequential | Cualquier cantidad. Coloca en orden (0→1→2→0...). |
| Alternating Ring | Exactamente 2 prefabs. Alterna por anillos concéntricos. |
| Diagonal | Exactamente 2 prefabs. Patrón diagonal según X+Z. |
| Stripe | Mínimo 2 prefabs. Franjas horizontales paralelas. |
| Border Only | Cualquier cantidad. Solo pinta el perímetro. |
Validación: El sistema muestra warnings si no tienes suficientes prefabs para el patrón seleccionado.