Manual/ Referencia de la API

Mundo de bloques

Leer y cambiar bloques de un mundo voxel.

Con un VoxelWorld en la escena (Crear > Mundo de bloques, o la plantilla Mundo de bloques del Hub) hay un mundo infinito de bloques como Minecraft: biomas, cuevas, árboles, mar, luz de antorchas y colisión con la física. La tabla Voxel lo controla. Los bloques se nombran por su número o por su nombre ("stone", "Piedra"); las coordenadas pueden ser cualquier número (se redondean hacia abajo).

Voxel.getBlock(x, y, z), Voxel.getBlockAt(pos)Número del bloque (0 = aire).
Voxel.setBlock(x, y, z, bloque)Pone o quita ("air") un bloque; la luz, la malla y la colisión se rehacen solas.
Voxel.blockInfo(bloque){ id, name, label, solid, placeable, replaceable, hardness, drop, light }.
Voxel.blockId(nombre), Voxel.blockCount()Número de un bloque y cuántos hay.
Voxel.blockColor(bloque)Color medio de su textura (Vec3): partículas y objetos del color del bloque.
Voxel.raycast(origen, dirección, distancia)Primer bloque que toca: { block, normal, id, point, distance } o nil. Un bloque nuevo iría en block + normal.
Voxel.moveBox(centro, semiejes, delta)Mueve una caja contra los bloques (el jugador). Devuelve posición, enSuelo, techo, pared.
Voxel.boxCollides(centro, semiejes)Si la caja toca algún bloque sólido.
Voxel.surfaceHeight(x, z)Altura del terreno generado (aunque no esté cargado).
Voxel.isReady(pos), Voxel.inWater(pos)Si el trozo ya está generado; si ese punto está en el agua.
Voxel.skyLight(x, y, z), Voxel.blockLight(x, y, z)Luz del cielo y de antorchas (0–15).
Voxel.newWorld(nombre, semilla), Voxel.loadWorld(nombre)Mundo con nombre (se guarda). loadWorld devuelve false si no existe.
Voxel.saveWorld(), Voxel.listWorlds(), Voxel.deleteWorld(nombre)Guardar (también al parar), la lista { name, seed, lastPlayed, mode } y borrar.
Voxel.setMeta(clave, texto), Voxel.getMeta(clave, porDefecto)Datos del juego guardados con el mundo (posición del jugador, modo…).
Voxel.worldName(), Voxel.seed(), Voxel.isActive()Mundo actual.
-- Poner una antorcha donde mira la cámara (clic derecho)
if Input.getMouseButtonDown(1) then
    local golpe = Voxel.raycast(self.entity.position, self.entity.forward, 6)
    if golpe then
        local p = golpe.block + golpe.normal
        Voxel.setBlock(p.x, p.y, p.z, "torch")
    end
end
La plantilla Mundo de bloques trae un juego de supervivencia completo en primera persona (Scripts/JugadorBloques.lua): vida, hambre y aire (daño por caída y al ahogarse, muerte y reaparición), inventario de 36 huecos con iconos (Assets/Voxel/Iconos), 13 recetas de crafteo (algunas piden mesa de trabajo), picos para la piedra y las menas, objetos que caen y se recogen, contorno del bloque apuntado, grietas al romper (Assets/Voxel/Grietas) y trocitos del color del bloque, pausa y guardado de todo. La propiedad creativo lo cambia a modo creativo (romper al instante, volar, bloques sin fin).

¿Algo no queda claro o falta algo? Pregunta en el Discord.