Terrain
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
El terreno te permite crear entornos dinámicamente morfos con poca o ninguna lag. Actualmente está basado en una cuadrícula de celdas 4×4×4, donde cada celda tiene un número entre 0 y 1 que representa la cantidad de geometría que ocupa la celda, y el material de la celda. La ocupación determina cómo la celda se transformará con las celdas circundantes, y el resultado es la ilusión de tener una celda con ninguna restriccióncuadrícula.
Para obtener más información, see terreno .
Resumo
Propriedades
Activa o desactiva la decoración del terreno.
Especifica la longitud de la hierba animada.
MaterialColors representa el editor para la función de color del material, y no se puede editar por scripts .
Para obtener el color de un material, use: Terrain:GetMaterialColor() Para establecer el color de un material, use: Terrain:SetMaterialColor()
Muestra los límites de la región más grande posible para editar.
El tinte del agua del terreno.
Controla la opacidad de los reflejos de agua del terreno.
La transparencia del agua del terreno.
Establece la altura máxima de las olas de agua del terreno en studs.
Establece la cantidad de veces que las olas de agua del terreno se moverán hacia arriba y hacia abajo por minuto.
Determina se uma peça é imóvel por física.
A velocidade angular da montagem da peça.
O centro de massa da montagem do mundo do ponto de espaço.
A velocidade linear da montagem da peça.
A massa total da montagem da peça.
Uma referência à parte raiz da montagem.
Determina o tipo de superfície para a Face de Trás de uma peça (+Z direção).
Determina o tipo de superfície para a face inferior de uma peça (-Y direção).
Determina a cor de uma peça.
Determina a posição e orientação do BasePart no mundo.
Determina se uma peça pode colidir com outras peças.
Determina se a peça é considerada durante as operações de consulta espacial.
Determina se os eventos Touched e TouchEnded são acionados na peça.
Determina se uma peça ou não cria uma sombra.
Descreve a posição mundial em que o centro de massa de uma parte está localizado.
Descreve o nome de um grupo de colisão de uma peça.
Determina a cor de uma peça.
Indica as propriedades físicas atuais da peça.
Determina várias propriedades físicas de uma peça.
Usado para ativar ou desativar forças aerodinâmicas em peças e montagens.
O tamanho físico real do BasePart conforme visto pelo motor de física.
Determina o tipo de superfície para a Frente de uma peça (-Z direção).
Determina o tipo de superfície para a face esquerda de uma peça (-X direção).
Determina um multiplicador para BasePart.Transparency que só é vísível para o cliente local.
Determina se uma peça é selecionável no Studio.
Descreve a massa da peça, o produto de sua densidade e volume.
Determina se a peça contribui para a massa total ou inércia de seu corpo rígido.
Determina as propriedades físicas padrão e textura de uma peça.
O nome de MaterialVariant .
Descreve a rotação da peça no mundo.
Especifica o deslocamento do pivô da peça de sua CFrame .
Descreve a posição da peça no mundo.
Tempo desde a última atualização de física.
Determina quanto uma peça reflete a caixa de céu.
Descreve a menor mudança de tamanho permitida pelo método Redimensionar.
Descreve os rostos em que uma peça pode ser redimensionada.
Determina o tipo de superfície para a direita de uma peça (+X direção).
A regra principal ao determinar a parte raiz de uma montagem.
A rotação da peça em graus para os três eixos.
Determina as dimensões de uma peça (comprimento, largura, altura).
Determina o tipo de superfície para a parte superior de uma peça (+Y direção).
Determina quanto uma peça pode ser vista através (a inversão da peça opacidade).
Métodos
Devuelve la posición mundial del centro de la celda de terreno (x, y, z).
Restablece la posición de la esquina inferior izquierda-frente de la celda de la cuadrícula (x, y, z).
Elimina el terreno.
Almacena un pedazo de terreno en un objeto TerrainRegion para que se pueda cargar más tarde. Nota: los datos de TerrainRegion no se replican entre el servidor y el cliente.
Devuelve el número de no hay espacios en el terreno.
Llena un balón de terreno liso en un espacio dado.
Rellena un bloque de terreno liso con una ubicación, rotación, tamaño y material dado.
Llena un cilindro de terreno liso en un espacio dado.
Llena un espacio Region3 con terreno liso.
Llena un volumen de forma de cuda con el dado Enum.Material y el área CFrame y tamaño.
Restablece el color de material de terreno actual para el material de terreno especificado.
Aplica un pedazo de terreno al objeto de terreno. Nota: los datos de TerrainRegion no se replican entre el servidor y el cliente.
Regresa un conjunto de datos de voxel de terreno en formato de tabla según los nombres de los canales.
Regresa una región determinada de terreno liso en formato de tabla.
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
Reemplaza el terreno de un material dentro de una región con otro material.
Establece el color de material de terreno actual para el material de terreno especificado.
Devuelve la ubicación de la celda de la cuadrícula que contiene el punto posición .
Devuelve la posición de la celda de la cuadrícula que contiene la posición del punto, preferiblemente sin espacios de celda de la cuadrícula cuando la posición está en un borde de la cuadrícula.
Devuelve la ubicación de la celda de la cuadrícula que contiene la posición del punto, preferiblemente no hay espacios no vacíos entre las filas de la cuadrícula cuando la posición está en un borde de la cuadrícula.
Establece una región de terreno usando un diccionario de datos de canal de voxel.
Establece una región determinada de terreno liso usando el formato de la tabla.
Aplique um impulso angular à montagem.
Aplique um impulso à montagem na montagem center of mass.
Aplique um impulso à montagem na posição especificada.
Retorna se as peças podem colidir entre si.
Verifica se você pode configurar a propriedade da rede de uma peça.
Retorna uma tabela de peças conectadas ao objeto por qualquer tipo de articulação rígida.
Retorne todas as Joints ou Constraints que estão conectadas a esta Peça.
Retorna o valor da propriedade Mass.
Retorna o jogador atual que é o dono da rede desta parte, ou nil no caso do servidor.
Retorna verdadeiro se o motor de jogo decidir automaticamente o proprietário da rede para esta parte.
Retorna a parte base de uma montagem de peças.
Retorna uma tabela de todas as peças BasePart.CanCollide que interagem com esta peça.
Retorna a velocidade linear da montagem da peça na posição fornecida em relação a esta peça.
Retorna verdadeiro se o objeto estiver conectado a uma peça que o manterá em seu lugar (por exemplo, uma peça Anchored )), caso contrário retorna falso.
Altera o tamanho de um objeto ao usar a ferramenta de redimensionamento do Studio.
Define o jogador dado como o proprietário da rede para este e todos os outros partes conectadas.
Deixe o motor de jogo decidir dinamicamente quem vai lidar com a física da peça (um dos clientes ou o servidor).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Cria uma nova IntersectOperation a partir da geometria sobreposição das peças e das outras peças na matriz / listadada.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Cria uma nova UnionOperation a partir da peça, minusando a geometria ocupada pelas peças na matriz / listadada.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Cria uma nova UnionOperation a partir da peça, plus theGeometry occupied by the parts in the given matriz / lista.
Obtém o pivô de um PVInstance.
Transforma o PVInstance juntamente com todos os seus descendentes PVInstances para que o pivô agora seja localizado no CFrame especificado.
Eventos
Eventos herdados de BasePartDispara quando uma parte para de tocar outra parte como resultado de um movimento físico.
Dispara quando uma parte toca outra parte como resultado do movimento físico.
Propriedades
Decoration
Actualmente habilita o deshabilita el pasto animado en el material de terreno hierba , aunque futuras modificaciones de esta propiedad pueden controlar características decorativas adicionales.
GrassLength
Especifica la longitud de la hierba animada en el material de terreno Hierba , admitiendo que Decoration está habilitado. Los valores válidos están entre 0.1 y 1.
MaterialColors
MaterialColors representa el editor para la función de color del material, y no se puede editar por scripts .
Para obtener el color de un material, usa: Terrain:GetMaterialColor()
Para establecer el color de un material, usa: Terrain:SetMaterialColor()
WaterWaveSize
Establece la altura máxima de las olas de agua del terreno en studs. Esto está actualmente limitado entre 0 y 1.
WaterWaveSpeed
Establece la cantidad de veces que las olas de agua del terreno se moverán hacia arriba y hacia abajo por minuto. Esto está actualmente limitado entre 0 y 100.
Métodos
CellCenterToWorld
Devuelve la posición mundial del centro de la celda de terreno (x, y, z).
Parâmetros
Devolução
CellCornerToWorld
Restablece la posición de la esquina inferior izquierda-frente de la celda de la cuadrícula (x, y, z).
Parâmetros
Devolução
Clear
Elimina el terreno.
Devolução
CopyRegion
Almacena un pedazo de terreno en un objeto TerrainRegion para que se pueda cargar más tarde. Nota: los datos de TerrainRegion no se replican entre el servidor y el cliente.
Parâmetros
Devolução
Amostras de código
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
Llena un balón de terreno liso en un espacio dado.
Parâmetros
La posición del centro de la bola de terreno.
El radio en studs de la bola de terreno.
El Enum.Material de la bola de terreno.
Devolução
Amostras de código
local Workspace = game:GetService("Workspace")
-- Creates a ball of grass at (0,0,-10) with a radius of 10 studs
Workspace.Terrain:FillBall(Vector3.new(0, 0, -10), 10, Enum.Material.Grass)
FillBlock
Rellena un bloque de terreno liso con una ubicación, rotación, tamaño y material dado.
Parâmetros
El cFrame (posición y orientación) del bloquesde terreno.
El tamaño en pies de cuadrado del bloque - tanto la altura como la ancho.
El Enum.Material del bloquesde terreno.
Devolução
FillCylinder
Rellena un cilindro de terreno liso en un espacio dado. El espacio se define usando un CFrame, altura y radio.
Uso
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
Parâmetros
El CFrame (posición y orientación) del cilindro de terreno.
La altura en pies de la cilindra de terreno.
El radio en studs del cilindro de terreno.
El Enum.Material del cilindro de terreno.
Devolução
FillWedge
FillWedge() llena un volumen en forma de cuda de Terrain con el dado Enum.Material y el área 0> Datatype.CFrame0> y el tamaño. La orientación del cuda es la misma que una versión equivalente FillWedge()3> .
Parâmetros
La posición y orientación de la cunilla para llenar.
El tamaño de la cunilla para llenar.
El material con el que se llenará el cuello.
Devolução
GetMaterialColor
Restablece el color de material de terreno actual para el material de terreno especificado.
Parâmetros
Devolução
PasteRegion
Aplica un pedazo de terreno al objeto de terreno. Nota: los datos de TerrainRegion no se replican entre el servidor y el cliente.
Parâmetros
Devolução
Amostras de código
--[[
Note: The use of int16 variants for these API is the result of legacy code.
The underlying voxel grid system uses Vector3int32 (Vector3).
]]
local Workspace = game:GetService("Workspace")
local Terrain = Workspace.Terrain
-- Create a simple terrain region (a 10x10x10 block of grass)
local initialRegion = Region3.new(Vector3.zero, Vector3.one * 10)
Terrain:FillRegion(initialRegion, 4, Enum.Material.Grass)
-- Copy the region using Terrain:CopyRegion
local copyRegion = Region3int16.new(Vector3int16.new(0, 0, 0), Vector3int16.new(10, 10, 10))
local copiedRegion = Terrain:CopyRegion(copyRegion)
-- Define where to paste the region (in this example, offsetting by 5 studs on the X-axis)
local newRegionCorner = Vector3int16.new(5, 0, 0)
-- Paste the region using Terrain:PasteRegion
Terrain:PasteRegion(copiedRegion, newRegionCorner, true)
ReadVoxelChannels
Regresa un conjunto de datos de voxel de terreno en formato de tabla según los nombres de los canales.
Parâmetros
Región de destino para leer. Debe estar alineado con la cuadrícula de voxel. Se lanzará un error si la región es demasiado grande; el límite es actualmente 4194304 voxels³.
Resolución de Voxel. Debe ser 4.
Array de ID de canal (cadenas) que necesitan ser accedidos desde los datos del voxel. Cada ID de canal representa un tipo de datos que se almacena en el Vóxel. Los ID actualmente admitidos son {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .
Devolução
Devuelve datos de voxel como un diccionario basado en la entrada channelIds. Las llaves representan cada ID de canal con su valor respectivo como un conjunto de datos 3D.
- SolidMaterial — El material de Enum.Material del Vóxel. Nota que Water ya no se soporta; en cambio, un voxel que contiene agua tendrá un valor de 0> LiquidOccupancy0> .
- SolidOccupancy — El ocupación del material del Vóxelcomo se especifica en el canal SolidMaterial . Este es un valor entre 0 (vacío) y 1 (lleno).
- LiquidOccupancy — Escribe la ocupación del material Water en un voxel como valor entre 0 (sin agua) y 1 (lleno de agua). Si la SolidOccupancy es 1 y la SolidMaterial no es SolidOccupancy, esto será 0.
El diccionario también contiene una llave Size con un valor que representa el tamaño del 3D del valor de cada canal de datos.
Amostras de código
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local channelOutput = terrain:ReadVoxelChannels(region, 4, {"SolidOccupancy", "SolidMaterial", "LiquidOccupancy"})
local size = channelOutput.Size
for x = 1, size.X do
for y = 1, size.Y do
for z = 1, size.Z do
print(("(%2i, %2i, %2i): %.2f %s %.2f"):format(x, y, z, channelOutput.SolidOccupancy[x][y][z], channelOutput.SolidMaterial[x][y][z].Name, channelOutput.LiquidOccupancy[x][y][z]))
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)
ReadVoxels
Regresa una región determinada de terreno liso en formato de tabla.
Parâmetros
Región de destino para leer. Debe estar alineado con la cuadrícula de voxel. Se lanzará un error si la región es demasiado grande. El límite es actualmente 4194304 voxels^3.
Resolución de Voxel. Debe ser 4.
Devolução
Devuelve datos de voxel sin procesar como dos 3D arrays.
- materials - Mat阵 3D de Enum.Material desde la zona de destino. También contiene un campo de tamaño, igual que las dimensiones de los mat阵 anidados.
- occupancies - Matriz 3D de valores de ocupación desde la zona de destino. También contiene un campo de tamaño, igual que las dimensiones de los arrays de nidos.
Amostras de código
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local function printRegion(terrain, region)
local materials, occupancies = terrain:ReadVoxels(region, 4)
local size = materials.Size -- Same as occupancies.Size
for x = 1, size.X, 1 do
for y = 1, size.Y, 1 do
for z = 1, size.Z, 1 do
print(("(%2i, %2i, %2i): %.2f %s"):format(x, y, z, occupancies[x][y][z], materials[x][y][z].Name))
end
end
end
end
local region = Region3.new(REGION_START, REGION_END)
printRegion(workspace.Terrain, region)
ReplaceMaterial
ReemplazarMaterial reemplaza el terreno de un cierto Enum.Material dentro de un Region3 con otro material. Esencialmente, es una operación de búsqueda y reemplazo en los materiales de Class.Terrain ".
Limitaciones
Cuando se llama a este método, el parámetro resolution debe ser exactamente 4. Además, el Region3 debe alinearse con la cuadrícula de materiales del terreno, es decir, los componentes de los puntos mínimo y máximo de la Region3 deben ser divibles por 4. Usa Region3:ExpandToGrid() para hacer una región compatible con esta función.
Parâmetros
La región en la que se llevará a producirsela operación de reemplazo.
La resolución a la que tendrá lugar la operación de reemplazo; en este momento, debe ser exactamente 4.
El viejo material que se deberá reemplazar.
El nuevo material.
Devolução
Amostras de código
local Workspace = game:GetService("Workspace")
local terrain = Workspace.Terrain
local region = Region3.new(Vector3.new(-20, -20, -20), Vector3.new(20, 20, 20))
local resolution = 4
local materialToReplace = Enum.Material.Grass
local replacementMaterial = Enum.Material.Asphalt
terrain:ReplaceMaterial(region, resolution, materialToReplace, replacementMaterial)
SetMaterialColor
Establece el color de material de terreno actual para el material de terreno especificado. El material de terreno cambiará su color de base hacia el color especificado.
Parâmetros
Devolução
WorldToCell
Devuelve la ubicación de la celda de la cuadrícula que contiene el punto posición .
Parâmetros
Devolução
WorldToCellPreferEmpty
Devuelve la posición de la celda de la cuadrícula que contiene la posición del punto, preferiblemente sin espacios de celda de la cuadrícula cuando la posición está en un borde de la cuadrícula.
Parâmetros
Devolução
WorldToCellPreferSolid
Devuelve la ubicación de la celda de la cuadrícula que contiene la posición del punto, preferiblemente no hay espacios no vacíos entre las filas de la cuadrícula cuando la posición está en un borde de la cuadrícula.
Parâmetros
Devolução
WriteVoxelChannels
Establece una región de terreno usando un diccionario de datos de canal de voxel.
Parâmetros
Región de destino para escribir. Debe estar alineado con la cuadrícula de voxel. Se lanzará un error si la región es demasiado grande; el límite es actualmente 4194304 voxels³.
Resolución de Voxel. Debe ser 4.
Diccionario de datos de voxel similar al valor de regreso de ReadVoxelChannels() . Las llaves representan cada ID de canal con su valor respectivo como un conjunto de datos 3D. El diccionario puede admitir una o más entradas de canal.
- SolidMaterial — El material de Enum.Material del Vóxel. Nota que Water ya no se soporta; en cambio, un voxel que solo contiene agua debe ingresarse como 0> SolidMaterial = Enum.Material.Air, LiquidOccupancy = x
- SolidOccupancy — El ocupación del material del Vóxelcomo se especifica en el canal SolidMaterial . Esto debería ser un valor entre 0 (vacío) y 1 (lleno).
- LiquidOccupancy — Escribe la ocupación del material Water en un voxel como valor entre 0 (sin agua) y 1 (lleno de agua). Si la SolidOccupancy es 1 y la SolidMaterial no es SolidOccupancy, esto será 0.
Devolução
Amostras de código
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(64, 32, 64))
local RESOLUTION = 4
local OCC_EPSILON = 1/256
local function generateRandomTerrainInRegion(regionInput)
local region = regionInput:ExpandToGrid(4)
local size = region.Size / 4
local solidMaterials = {}
local solidOccupancies = {}
local waterOcc = {}
for x = 1, size.X do
table.insert(solidMaterials, {})
table.insert(solidOccupancies, {})
table.insert(waterOcc, {})
for y = 1, size.Y do
table.insert(solidMaterials[x], {})
table.insert(solidOccupancies[x], {})
table.insert(waterOcc[x], {})
for z = 1, size.Z do
local mat = if math.random() < 0.5 then Enum.Material.Air else Enum.Material.Sand
local occ = 0
local water = math.random()
if mat == Enum.Material.Sand then
occ = math.random() / 2 + 0.5
if occ > 1 - OCC_EPSILON then
water = 0 -- Solids cannot contain water
end
else
occ = 0
end
table.insert(solidMaterials[x][y], mat)
table.insert(solidOccupancies[x][y], occ)
table.insert(waterOcc[x][y], water)
end
end
end
return {SolidMaterial = solidMaterials, SolidOccupancy = solidOccupancies, LiquidOccupancy = waterOcc}
end
local regionContent = generateRandomTerrainInRegion(region)
workspace.Terrain:WriteVoxelChannels(region, 4, regionContent)
WriteVoxels
Establece una región determinada de terreno liso usando el formato de la tabla.
Parâmetros
Región de destino para escribir. Tiene que estar alineado con la cuadrícula de voxel. Mostrará un error si la región es demasiado grande.
Resolución de Voxel. Debe ser 4.
3D array de Enum.Material. Las dimensiones deben coincidir exactamente con el tamaño de la región objetivo en voxeles.
3D array de ocupaciones de voxel (número entre 0 y 1). Las dimensiones deben coincidir exactamente con el tamaño de la región objetivo en voxels.
Devolução
Amostras de código
local Workspace = game:GetService("Workspace")
local terrain = Workspace.Terrain
local resolution = 4
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 28, 20)):ExpandToGrid(resolution)
local materials = {
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.Sand,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Snow, Enum.Material.Air },
},
{
{
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
Enum.Material.CrackedLava,
},
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock, Enum.Material.Rock },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand, Enum.Material.Sand },
{ Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud, Enum.Material.Mud },
{ Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air, Enum.Material.Air },
},
}
local occupancies = {
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 1, 1, 1, 0.5 },
{ 0, 1, 1, 1, 0 },
},
{
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1 },
{ 0.5, 0.5, 0.5, 0.5, 0.5 },
{ 0, 0, 0, 0, 0 },
},
}
terrain:WriteVoxels(region, resolution, materials, occupancies)
local REGION_START = Vector3.new(-20, -20, -20)
local REGION_END = Vector3.new(20, 20, 20)
local CFRAME = CFrame.new(0, 20, 0)
local SIZE = 50
local function getRegionVolumeVoxels(region)
local resolution = 4
local size = region.Size
return (size.x / resolution) * (size.y / resolution) * (size.z / resolution)
end
local function isRegionTooLargeForReadWriteVoxels(region)
return getRegionVolumeVoxels(region) > 4194304
end
local function isRegionTooLarge(region)
return getRegionVolumeVoxels(region) > 67108864
end
-- Helper function to get an axis-aligned Region3 from the given cframe and size
local function getAABBRegion(cframe, size)
local inv = cframe:Inverse()
local x = size * inv.RightVector
local y = size * inv.UpVector
local z = size * inv.LookVector
local w = math.abs(x.X) + math.abs(x.Y) + math.abs(x.Z)
local h = math.abs(y.X) + math.abs(y.Y) + math.abs(y.Z)
local d = math.abs(z.X) + math.abs(z.Y) + math.abs(z.Z)
local pos = cframe.Position
local halfSize = Vector3.new(w, h, d) / 2
return Region3.new(pos - halfSize, pos + halfSize):ExpandToGrid(4)
end
-- Specific functions for checking individual methods
local function isRegionTooLargeForFillBall(cframe, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, diameter, diameter)))
end
local function isRegionTooLargeForFillBlock(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForFillCylinder(cframe, height, radius)
local diameter = radius * 2
return isRegionTooLarge(getAABBRegion(cframe, Vector3.new(diameter, height, diameter)))
end
local function isRegionTooLargeForFillRegion(region)
return isRegionTooLarge(region)
end
local function isRegionTooLargeForFillWedge(cframe, size)
return isRegionTooLarge(getAABBRegion(cframe, size))
end
local function isRegionTooLargeForReplaceMaterial(region)
return isRegionTooLarge(region)
end
local region = Region3.new(REGION_START, REGION_END)
print(isRegionTooLargeForReadWriteVoxels(region))
print(isRegionTooLargeForFillBall(CFRAME, SIZE))
print(isRegionTooLargeForFillBlock(CFRAME, SIZE))
print(isRegionTooLargeForFillCylinder(CFRAME, SIZE, SIZE))
print(isRegionTooLargeForFillRegion(region))
print(isRegionTooLargeForFillWedge(CFRAME, SIZE))
print(isRegionTooLargeForReplaceMaterial(region))