Mundos de la nada — Mapas procedurales en Unity
Un mundo
nace de la
nada.
¿Mazmorras que cambian en cada partida? ¿Montañas que aparecen con una semilla? Aprende a crear escenarios procedurales para tus juegos con ideas claras, ejemplos en C# y cero necesidad de ser un mago del código.
Para principiantes · proyectos pequeños primero · errores incluidos en el aprendizaje
42
Procedural no es
“que salga lo que sea”.
Es crear reglas y dejar que el ordenador las combine. Tú decides qué puede aparecer, dónde y con qué límites; el algoritmo hace el trabajo repetitivo. Como una caja de LEGO que se monta sola, pero con más C#.
Define las piezas
Elige tiles para un juego 2D, o alturas, texturas y objetos para un terreno 3D. Empieza con pocas piezas: hierba, roca, agua y una salida ya dan juego.
Escribe las reglas
Una cuadrícula ordena las habitaciones; el ruido Perlin mezcla alturas de forma suave. La semilla controla el azar para poder repetir, depurar y compartir el mismo mapa.
Prueba y pon límites
Comprueba que el mapa tenga camino, salida y espacio para jugar. Si el generador hace un espagueti imposible, ajusta las reglas: ¡el algoritmo no se ofende!
¿Mazmorra pixelada
o montaña épica?
El método depende del tipo de juego. En 2D piensas en celdas y conexiones; en 3D, en una superficie con altura. Ambos pueden usar una semilla para recrear el mismo resultado.
La mazmorra que se pasea sola
Crea una cuadrícula y empieza en una celda. Un “paseante borracho” da pasos al azar; cada cierto tiempo abres una sala alrededor del camino. Después conviertes las celdas visitadas en tiles y decoras las paredes.
- Fácil: Tilemap + caminata aleatoria.
- Más control: salas prefabricadas en rejilla, conectadas por pasillos.
- Para cuevas: ruido aleatorio + reglas de autómata celular para suavizar túneles.
Montañas a partir de ruido
Una cuadrícula de alturas se transforma en un Terrain. El ruido Perlin aporta variaciones suaves; después pintas materiales por altura y añades árboles, rocas y caminos con reglas propias.
- Fácil: Terrain de Unity + altura generada por C#.
- Control artístico: combina varias escalas de ruido y suaviza los bordes.
- Rendimiento: divide mundos grandes en chunks y genera solo lo cercano.
Dos semillas.
Dos mundos nuevos.
Prueba estos prototipos antes de buscar el generador perfecto. Los dos scripts son ejemplos educativos para proyectos 2D/3D de Unity y puedes copiar cada bloque con su botón.
using UnityEngine;
using UnityEngine.Tilemaps;
public class Mapa2D : MonoBehaviour
{
[SerializeField] private Tilemap tilemap;
[SerializeField] private TileBase suelo;
[SerializeField] private int pasos = 180;
[SerializeField] private int semilla = 42;
private void Start()
{
if (tilemap == null || suelo == null)
{
Debug.LogError("Asigna el Tilemap y el tile de suelo en el Inspector.", this);
return;
}
tilemap.ClearAllTiles();
var azar = new System.Random(semilla);
var posicion = Vector2Int.zero;
for (int paso = 0; paso < pasos; paso++)
{
// Abre una pequeña sala alrededor del caminante.
for (int x = -1; x <= 1; x++)
for (int y = -1; y <= 1; y++)
tilemap.SetTile(
new Vector3Int(posicion.x + x, posicion.y + y, 0), suelo);
switch (azar.Next(4))
{
case 0: posicion += Vector2Int.up; break;
case 1: posicion += Vector2Int.down; break;
case 2: posicion += Vector2Int.left; break;
default: posicion += Vector2Int.right; break;
}
}
}
}
El script pinta un suelo continuo, sin paredes. Para hacerlo mazmorra, detecta celdas vacías junto al camino y coloca tiles de muro; reserva una salida al final.
using UnityEngine;
public class TerrenoPerlin : MonoBehaviour
{
[SerializeField] private int resolucion = 129;
[SerializeField] private int semilla = 42;
[SerializeField] private float escala = 5f;
[SerializeField] private float alturaMaxima = 0.12f;
private void Start()
{
int offset = semilla * 1000;
var datos = new TerrainData
{
heightmapResolution = resolucion,
size = new Vector3(500f, 80f, 500f)
};
var alturas = new float[resolucion, resolucion];
for (int z = 0; z < resolucion; z++)
for (int x = 0; x < resolucion; x++)
{
float nx = (float)x / (resolucion - 1);
float nz = (float)z / (resolucion - 1);
float ruido = Mathf.PerlinNoise(
nx * escala + offset, nz * escala + offset);
alturas[z, x] = ruido * alturaMaxima;
}
datos.SetHeights(0, 0, alturas);
Terrain.CreateTerrainGameObject(datos);
}
}
Para un relieve más rico suma varias capas de ruido (octavas). TerrainData almacena las alturas normalizadas entre 0 y 1.
¿Quieres ver un proyecto completo en GitHub?
La serie de Sebastian Lague incluye proyectos de generación de terrenos y cuevas en Unity. Descarga el repositorio, abre la carpeta del episodio como proyecto y revisa su README y licencia antes de reutilizarlo.
También hay cuevas 2D para estudiar
El repositorio de generación de cuevas contiene episodios y código de ejemplo. Es un buen compañero para experimentar con mapas por celdas y suavizado.
Un inventario de
recursos gratuitos.
Te dejamos búsquedas de la Asset Store de Unity, en lugar de prometer que un paquete concreto seguirá gratis para siempre. Activa el filtro gratuito y comprueba licencia y compatibilidad antes de importar.
Tiles 2D y pixel art
Suelo, paredes, agua y decoración para probar mapas con Tilemap.
Buscar tiles 2D gratis ↗Mazmorras y cuevas
Sprites y piezas para salas, pasillos, cofres y aventuras roguelike.
Buscar mazmorras gratis ↗Entornos low-poly
Árboles, rocas y props con formas sencillas para escenas 3D ligeras.
Buscar entornos gratis ↗Terrenos y naturaleza
Materiales y contenido para vestir una montaña generada por código.
Buscar terrenos gratis ↗Herramientas de terreno
Encuentra herramientas y extensiones gratuitas para el flujo de Terrain.
Buscar herramientas gratis ↗Efectos y partículas
Polvo, niebla y efectos para que hasta un prototipo parezca mágico.
Buscar efectos gratis ↗En la ficha del asset revisa precio actual, licencia de uso, fecha de actualización y pipeline compatible (Built-in, URP o HDRP). Un paquete puede cambiar de precio o dejar de recibir soporte.
Lo nuevo, sin
perderse en el ruido.
Las novedades cambian con cada versión. Estas fuentes oficiales permiten comprobar qué versión de Unity 6 está publicada y cómo usar las herramientas actuales para Tilemaps y Terrain.
Unity 6 · notas de versión vivas
La página oficial “What’s new” se actualiza con las releases del Editor; al preparar esta guía conduce a Unity 6000.6.7f1. Lee las notas de la versión exacta antes de actualizar un proyecto.
Consultar novedades oficiales ↗Terrain nativo de Unity
El manual explica cómo crear Terrain, esculpirlo, pintarlo y añadir árboles o detalles. Es una herramienta incluida en el Editor, no hace falta un paquete externo para empezar.
Guía oficial de Terrain ↗Tilemaps para mundos 2D
La documentación de Unity explica las piezas de Tilemap y el flujo para pintar tiles en una cuadrícula. Encaja muy bien con mapas generados por scripts como el ejemplo de esta página.
Manual oficial de Tilemap ↗Tu primer mundo puede ser pequeñito.
Una cueva, una isla o diez habitaciones conectadas: el mejor generador es el que puedes entender, probar y mejorar. Elige una semilla y dale al Play.

No hay comentarios