Un mapa de tiles en Godot consiste en tomar una hoja de sprites con pequeñas imágenes como césped, caminos, muros y agua, dividirla en celdas regulares y luego montar el nivel como si estuvieras pintando.
En Godot 4.x, especialmente para proyectos nuevos después de 4.3, conviene usar TileMapLayer. El nodo antiguo TileMap está marcado como obsoleto. Hoy es más recomendable usar un TileMapLayer por cada capa del mapa. Así la jerarquía queda más clara y encaja mejor con la forma de organizar nodos en Godot.
La documentación oficial también indica que TileMapLayer es un nodo para 2D tile-based maps y que usa un TileSet para crear mapas en cuadrícula. Si necesitas varias capas, usa varios TileMapLayer.
Documentación oficial:
https://docs.godotengine.org/en/stable/classes/class_tilemaplayer.html
https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html
Dos conceptos clave
Lo más importante en un mapa de tiles son dos cosas:
TileSetTileMapLayer
TileSet es la biblioteca de tiles. Guarda:
- Tiles de césped, tierra, muros, agua, caminos y otros elementos.
- Formas de colisión para cada tile.
- Reglas de conexión automática con Terrain.
- Navegación, oclusión y datos personalizados.
TileMapLayer es el lienzo. Usa los tiles del TileSet para dibujar el mapa.
Puedes empezar con una estructura como esta:
|
|
Separar por capas tiene varias ventajas:
- El suelo no se mezcla con los muros.
- El orden de dibujo es más fácil de controlar.
- Puedes ocultar una capa concreta.
- Solo la capa de muros necesita colisión; la capa de suelo puede seguir siendo simple.
- Codex tendrá una estructura de nodos más clara cuando escriba scripts.
Crear el primer mapa de tiles
Primero prepara una imagen de tiles, por ejemplo:
|
|
Cada celda dentro de la imagen debe tener el mismo tamaño. Los tamaños comunes son:
|
|
Si cada tile del recurso mide 32 × 32, el Tile Size del TileSet también debería ser 32 × 32.
Añadir TileMapLayer
Añade esto a la escena:
|
|
Cambia el nombre de TileMapLayer a:
|
|
Selecciona Ground y busca en el Inspector:
|
|
Haz clic en:
|
|
Luego abre el recurso TileSet recién creado y configura Tile Size con el tamaño de celda del recurso, por ejemplo:
|
|
Añadir la imagen de tiles
Después de seleccionar Ground, aparecerá abajo el panel de edición TileMap / TileSet.
Arrastra tileset.png al panel TileSet y elige la creación automática de tiles. Godot dividirá la imagen en tiles según Tile Size.
Después de este paso, el TileSet ya contiene tiles que se pueden dibujar, y el TileMapLayer Ground puede usarlos para pintar el mapa.
Dibujar el mapa
Cambia al panel TileMap inferior:
- Elige un tile de césped.
- Dibuja con la herramienta de lápiz.
- Borra con la goma.
- Usa la herramienta de rectángulo para rellenar zonas rápidamente.
- Usa la herramienta de relleno para completar áreas conectadas.
No empieces con un mapa enorme. Dibuja primero un mapa pequeño de 20 × 15, solo con césped, muros y un punto de aparición para el jugador.
Añadir colisión a los muros
No añadas colisión a todos los tiles de suelo. Normalmente solo los elementos no transitables necesitan colisión:
- Muros.
- Rocas.
- Vallas.
- Bordes de agua.
- Acantilados.
Selecciona el recurso TileSet y busca en el Inspector:
|
|
Haz clic en:
|
|
Una configuración común es:
|
|
Después, en el panel inferior TileSet:
- Cambia a las herramientas de colisión o dibujo físico.
- Selecciona un tile de muro.
- Dibuja una colisión rectangular o poligonal sobre la zona del muro.
Así, distintos tiles dentro del mismo TileSet pueden tener distintas formas de colisión.
Hacer que el jugador choque con los muros
Una escena básica de jugador puede ser:
|
|
El script de movimiento puede empezar así:
|
|
Mientras la capa y máscara de colisión de Player coincidan con la capa física del TileSet, el jugador quedará bloqueado por los tiles de muro.
Al ejecutar el juego, puedes activar:
|
|
Esto permite ver directamente las formas de colisión de los muros y del jugador, lo que facilita mucho el diagnóstico.
Dividir el mapa en tres capas
Para empezar, usa tres capas:
|
|
Cada nodo es un TileMapLayer independiente.
En Ground coloca:
- Césped.
- Tierra.
- Caminos.
- Suelos.
Normalmente no tiene colisión.
En Walls coloca:
- Muros.
- Acantilados.
- Bordes de agua.
- Rocas no transitables.
Normalmente tiene colisión.
En Decoration coloca:
- Flores pequeñas.
- Hojas de césped.
- Grietas del suelo.
- Sombras.
Normalmente no tiene colisión.
Puedes usar z_index para un orden de dibujo básico:
|
|
Si hay árboles, tejados o pasos bajo puentes que deben tapar al jugador, puedes resolverlo más adelante con Y Sort o dividiendo los objetos en partes superior e inferior. El primer mapa no necesita un sistema complejo de oclusión.
Usar Terrain para conectar caminos y muros automáticamente
Si quieres que el editor genere bordes y esquinas automáticamente, por ejemplo:
- Césped conectado con bordes de tierra.
- Caminos con esquinas generadas automáticamente.
- Muros que eligen el tile correcto según los vecinos.
- Agua con orillas generadas automáticamente.
Necesitas usar Terrain Set de Godot.
El proceso básico es:
- Añadir un
Terrain Seten elTileSet. - Configurar el modo de coincidencia, por ejemplo por lados y esquinas.
- Crear terrains, como
Grass,DirtyWater. - Marcar las posiciones de conexión de terreno en cada tile.
- Cambiar el
TileMapLayeral modo de dibujoTerrains. - Dibujar el mapa con la herramienta
ConnectoPath.
Godot elegirá tiles rectos, esquinas y bordes según las celdas cercanas. La documentación oficial también menciona dos modos de dibujo de Terrain: Connect, más fácil para empezar, y Path, más adecuado cuando necesitas más control manual sobre caminos.
No hace falta aprender Terrain de inmediato. Primero dibuja un mapa pequeño a mano y entiende TileSet, TileMapLayer y las colisiones. Después pasa a la conexión automática.
Manipular tiles desde código
Supón esta estructura:
|
|
Puedes referenciar Ground desde el script de World:
|
|
Aquí, cell es la coordenada de celda del mapa. Por ejemplo:
|
|
Esto coloca un tile de césped en la columna 5, fila 3.
Importante: SOURCE_ID y las coordenadas atlas de GRASS_TILE deben coincidir con tu TileSet real. No copies los valores de ejemplo sin comprobarlos.
Convertir entre coordenadas del mundo y coordenadas de celda
La posición del mouse está en coordenadas del mundo, pero el mapa de tiles usa coordenadas de celda. Normalmente primero conviertes a coordenadas locales de la capa y luego a celda del mapa.
Coordenada del mundo a celda:
|
|
Coordenada de celda a posición del mapa:
|
|
Para colocar un tile con clic del mouse:
|
|
Si también quieres borrar tiles con clic derecho, usa:
|
|
set_cell(), erase_cell(), local_to_map() y map_to_local() son API comunes de TileMapLayer.
No conviertas cofres, puertas y monedas en tiles planos
Estos objetos normalmente no deberían ser solo tiles de imagen:
- Monedas.
- Cofres.
- Puertas que se pueden abrir.
- NPC.
- Enemigos.
- Puntos de teletransporte.
- Mecanismos.
- Cajas destructibles.
Tienen scripts, animaciones, colisiones y señales, así que conviene crearlos como escenas independientes.
Por ejemplo, una moneda:
|
|
Luego colócala en:
|
|
Los tiles normales van bien para mapas estáticos. Los objetos con comportamiento funcionan mejor como Scene independientes. Godot también soporta tiles de tipo Scene Collection, pero para principiantes es más fácil entender y depurar escenas independientes colocadas a mano.
En qué puede ayudar Codex
Codex es útil para:
- Escribir scripts de movimiento del jugador.
- Leer celdas del mapa.
- Generar mapas proceduralmente.
- Pintar tiles de suelo de forma aleatoria.
- Colocar y borrar tiles con el mouse.
- Encontrar puntos de aparición.
- Leer datos personalizados de tiles.
- Revisar el uso de la API
TileMapLayer. - Implementar lógica de monedas, puertas y cofres.
Puedes pedirle algo así:
|
|
Codex no es tan adecuado para:
- Decidir cuántos píxeles debe medir cada tile del recurso.
- Dibujar visualmente todo el mapa.
- Configurar con precisión las máscaras de Terrain.
- Adivinar
source_id. - Adivinar coordenadas atlas.
- Escribir a mano grandes datos de mapa
.tscn.
La división más práctica es: tú creas el TileSet, configuras colisiones y dibujas el mapa en el editor de Godot; Codex escribe la interacción del mapa, la lógica de generación y los scripts de gameplay sobre la estructura real de nodos.
Primer ejercicio
Para el primer ejercicio, crea solo un mapa pequeño de 20 × 15:
- Pintar césped en
Ground. - Dibujar un borde de muros en
Walls. - Configurar colisión para los tiles de muro.
- Colocar un
Player. - Hacer que el jugador sea bloqueado por los muros.
- Añadir después una escena
Coin.
Cuando termines este ejercicio, entenderás el flujo básico de mapas de tiles en Godot:
|
|
Haz funcionar primero este mapa mínimo. Luego pasa a Terrain, Y Sort, generación procedural y carga de mapas grandes.