Terrain

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable

El terreno te permite crear entornos dinámicamente morfables con poco o ningún retraso.Actualmente se basa en una cuadrícula de 4×4×4 de células, donde cada celda tiene un número entre 0 y 1 que representa cuánto debería ocupar la geometría la celda y el material de la celda.La ocupación determina cómo la celda se transformará junto con las células circundantes, y el resultado es la ilusión de no tener ninguna restricción de red.

Para obtener más información, vea Terreno.

Resumen

Propiedades

Propiedades heredados de BasePartPropiedades heredados de PVInstance

Métodos

Métodos heredados de BasePartMétodos heredados de PVInstance

Eventos

Eventos heredados de BasePart

Propiedades

Decoration

No programable
Leer paralelo

Actualmente habilita o deshabilita la hierba animada en el material de terreno Césped , aunque las futuras modificaciones de esta propiedad pueden controlar características decorativas adicionales.

GrassLength

No programable
Leer paralelo

Specifica la longitud de la hierba animada en el material del terreno Césped , asumiendo que Decoration está habilitado. Los valores válidos están entre 0.1 y 1.

MaterialColors

BinaryString
No programable
Leer paralelo

MaterialColors representa al editor para la función de color de 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, utilice: Terrain:SetMaterialColor()

MaxExtents

Solo lectura
No replicado
Leer paralelo

Muestra los límites de la región editable más grande posible.

WaterColor

Leer paralelo

El tinte del agua del terreno.

WaterReflectance

Leer paralelo

Controla cuán opaca son las reflecciones de agua del terreno.

WaterTransparency

Leer paralelo

La transparencia del agua del terreno.

WaterWaveSize

Leer paralelo

Establece la altura máxima de las olas de agua del terreno en studs. Esto está actualmente restringido entre 0 y 1.

WaterWaveSpeed

Leer paralelo

Establece cuántas veces las olas de agua del terreno se moverán hacia arriba y hacia abajo por minuto. Esto está actualmente restringido entre 0 y 100.

Métodos

CellCenterToWorld

Devuelve la posición mundial del centro de la celda de terreno (x, y, z).

Parámetros

Valor predeterminado: ""
Valor predeterminado: ""
Valor predeterminado: ""

Devuelve

CellCornerToWorld

Devuelve la posición del borde inferior izquierdo hacia adelante de la celda de la cuadrícula (x, y, z).

Parámetros

Valor predeterminado: ""
Valor predeterminado: ""
Valor predeterminado: ""

Devuelve

Clear

()

Despeja el terreno.


Devuelve

()

ClearVoxelsAsync_beta

()

Parámetros

region: Region3
Valor predeterminado: ""
channelIds: Array
Valor predeterminado: ""

Devuelve

()

CopyRegion

Almacena un trozo de terreno en un objeto TerrainRegion para que se pueda cargar de nuevo más tarde.Nota: TerrainRegion los datos no se replican entre el servidor y el cliente.

Parámetros

region: Region3int16
Valor predeterminado: ""

Devuelve

Muestras de código

The following code will copy the whole Terrain and clear it. After 5 seconds it will paste the terrain back.

Terrain:CopyRegion

local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)

CountCells

Devuelve el número de celdas no vacías en el terreno.


Devuelve

FillBall

()

Llena una bola de terreno liso en un espacio dado.

Parámetros

center: Vector3

La posición del centro de la bola de terreno.

Valor predeterminado: ""
radius: number

El radio en studs de la bola de terreno.

Valor predeterminado: ""
material: Enum.Material

El Enum.Material de la bola de terreno.

Valor predeterminado: ""

Devuelve

()

Muestras de código

Terrain:FillBall() creates a ball of terrain given a center position, ball radius, and terrain materials.

Filling a Ball of Terrain

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

()

Llena un bloque de terreno liso con una ubicación, rotación, tamaño y material dados.

Parámetros

cframe: CFrame

La posición y orientación del bloque de terreno.

Valor predeterminado: ""
size: Vector3

El tamaño en studs del bloque cuadrado - tanto la altura como el ancho.

Valor predeterminado: ""
material: Enum.Material

El Enum.Material del bloque de terreno.

Valor predeterminado: ""

Devuelve

()

FillCylinder

()

Llena un cilindro de terreno liso en un espacio dado. El espacio se define usando un marco C, altura y radio.


local Workspace = game:GetService("Workspace")
Workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Parámetros

cframe: CFrame

La posición y orientación del cilindro de terreno.

Valor predeterminado: ""
height: number

La altura en studs del cilindro de terreno.

Valor predeterminado: ""
radius: number

El radio en studs del cilindro de terreno.

Valor predeterminado: ""
material: Enum.Material

El Enum.Material de la cilindro de terreno.

Valor predeterminado: ""

Devuelve

()

FillRegion

()

Llena un espacio Region3 con terreno liso.

Parámetros

region: Region3
Valor predeterminado: ""
resolution: number
Valor predeterminado: ""
material: Enum.Material
Valor predeterminado: ""

Devuelve

()

FillWedge

()

llena un volumen en forma de cuña de con el dado y el tamaño y la cantidad de la región.La orientación del cuña es la misma que una equivalente WedgePart .

Parámetros

cframe: CFrame

La posición y orientación del cuña para llenar.

Valor predeterminado: ""
size: Vector3

El tamaño del cuña para llenar.

Valor predeterminado: ""
material: Enum.Material

El material con el que se rellenará la cuña.

Valor predeterminado: ""

Devuelve

()

GetMaterialColor

Escribir paralelo

Devuelve el color del material de terreno actual para el material de terreno especificado.

Parámetros

material: Enum.Material
Valor predeterminado: ""

Devuelve

IterateVoxelsAsync_beta

Parámetros

region: Region3
Valor predeterminado: ""
resolution: number
Valor predeterminado: ""
channelIds: Array
Valor predeterminado: ""

Devuelve

ModifyVoxelsAsync_beta

Parámetros

region: Region3
Valor predeterminado: ""
resolution: number
Valor predeterminado: ""
channelIds: Array
Valor predeterminado: ""

Devuelve

PasteRegion

()

Aplica un trozo de terreno al objeto de terreno. Nota: TerrainRegion los datos no se replican entre el servidor y el cliente.

Parámetros

Valor predeterminado: ""
corner: Vector3int16
Valor predeterminado: ""
pasteEmptyCells: boolean
Valor predeterminado: ""

Devuelve

()

Muestras de código

Creates some terrain, copies it, then pastes it using the following API:

Create, Copy and Paste Terrain

--[[
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

Escribir paralelo

Devuelve una región de datos de vóxel de terreno en formato tabla basada en los nombres de los canales.

Parámetros

region: Region3

Región objetivo para leer. Debe alinearse con la cuadrícula de vóxeles. Arrojará un error si la región es demasiado grande; el límite actual es 4194304 vóxeles³.

Valor predeterminado: ""
resolution: number

Resolución de vóxel. Debe ser 4.

Valor predeterminado: ""
channelIds: Array

Arr列 de ID de canal (textos) que deben ser accedidos desde los datos de voxel.Cada ID de canal representa un tipo de dato que se almacena en voxel.Las IDs admitidas actuales son {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .

Valor predeterminado: ""

Devuelve

Devuelve datos de vóxel como diccionario basado en la entrada channelIds. Las claves representan cada ID de canal con su respectivo valor como un array de datos 3D.

  • SolidMaterial — El material Enum.Material del vóxel.Tenga en cuenta que Water ya no se admite; en cambio, un vóxel que contenga agua tendrá un valor de LiquidOccupancy .
  • SolidOccupancy — La ocupación del material del vóxel especificado en el canal SolidMaterial. Este es un valor entre 0 (vacío) y 1 (lleno).
  • LiquidOccupancy — Especifica la ocupación del material Water en un voxel como un valor entre 0 (sin agua) y 1 (lleno de agua).Si el SolidOccupancy es 1 y el SolidMaterial no es Air , esto será 0.

La diccionario también contiene una clave Size con un valor que representa el tamaño de la matriz 3D de cada dato de canal.

Muestras de código

Terreno:ReadVoxelChannels()

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

Escribir paralelo

Devuelve una cierta región de terreno liso en formato de tabla.

Parámetros

region: Region3

Región objetivo para leer. Debe alinearse con la cuadrícula de vóxeles. Arrojará un error si la región es demasiado grande. El límite es actualmente 4194304 vóxeles^3.

Valor predeterminado: ""
resolution: number

Resolución de vóxel. Debe ser 4.

Valor predeterminado: ""

Devuelve

Devuelve datos de vóxel crudos como dos arreglos 3D.

  • materials - 3D array de Enum.Material del área de destino. También contiene un campo de tamaño, igual a las dimensiones de los arrays anidados.
  • occupancies - 3D array de valores de ocupación de la zona objetivo. También contiene un campo de tamaño, igual a las dimensiones de los arrays anidados.

Muestras de código

Terreno:Ejemplo de código de ReadVoxels()

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 -- Igual que las ocupaciones.Tamaño
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)

ReadVoxelsAsync_beta

Parámetros

region: Region3
Valor predeterminado: ""
resolution: number
Valor predeterminado: ""
channelIds: Array
Valor predeterminado: ""

Devuelve

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 Terrain materiales.

Limitaciones

Al llamar este método, el parámetro resolution debe ser exactamente 4.Además, la Región3 debe alinearse con la cuadrícula de materiales de terreno, es decir,los componentes de los puntos mínimos y máximos de la Región3 deben ser divisibles por 4.Usa Region3:ExpandToGrid() para hacer una región compatible con esta función.

Parámetros

region: Region3

La región en la que ocurrirá la operación de reemplazo.

Valor predeterminado: ""
resolution: number

La resolución en la que se llevará a cabo la operación de reemplazo; en este momento debe ser exactamente 4.

Valor predeterminado: ""
sourceMaterial: Enum.Material

El material antiguo que debe reemplazarse.

Valor predeterminado: ""
targetMaterial: Enum.Material

El nuevo material.

Valor predeterminado: ""

Devuelve

()

Muestras de código

This code sample demonstrates the usage of Terrain:ReplaceMaterial() by replacing grass near the game origin with asphalt. It does this by constructing a Region3 using two Vector3s.

Terrain:ReplaceMaterial

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 del material del terreno actual para el material del terreno especificado. El material del terreno cambiará su color base hacia el color especificado.

Parámetros

material: Enum.Material
Valor predeterminado: ""
value: Color3
Valor predeterminado: ""

Devuelve

()

WorldToCell

Devuelve la ubicación de la celda de la cuadrícula que contiene la posición de punto **** .

Parámetros

position: Vector3
Valor predeterminado: ""

Devuelve

WorldToCellPreferEmpty

Devuelve la ubicación de la celda de la cuadrícula que contiene la posición del punto, prefiriendo celdas de cuadrícula vacías cuando la posición está en el borde de la cuadrícula.

Parámetros

position: Vector3
Valor predeterminado: ""

Devuelve

WorldToCellPreferSolid

Devuelve la ubicación de la celda de la cuadrícula que contiene la posición del punto, prefiriendo celdas de cuadrícula no vacías cuando la posición está en el borde de la cuadrícula.

Parámetros

position: Vector3
Valor predeterminado: ""

Devuelve

WriteVoxelChannels

()

Establece una región de terreno usando un diccionario de datos de canal de voxel.

Parámetros

region: Region3

Región objetivo para escribir. Debe alinearse con la cuadrícula de vóxeles. Arrojará un error si la región es demasiado grande; el límite actual es 4194304 vóxeles³.

Valor predeterminado: ""
resolution: number

Resolución de vóxel. Debe ser 4.

Valor predeterminado: ""
channels: Dictionary

Diccionario de datos de voxel similar al valor de devolución de ReadVoxelChannels() .Las claves representan cada ID de canal con su respectivo valor como un conjunto de 3D de datos.La diccionario puede admitir entradas de un solo o múltiples canales.

  • SolidMaterial — El material Enum.Material del vóxel.Tenga en cuenta que Water ya no se admite; en cambio, un voxel que contenga solo agua debe ingresarse como SolidMaterial = Enum.Material.Air, LiquidOccupancy = x , donde x es un número entre 0 (exclusivo) y 1 (inclusivo).
  • SolidOccupancy — La ocupación del material del vóxel especificado en el canal SolidMaterial. Este debe ser un valor entre 0 (vacío) y 1 (lleno).
  • LiquidOccupancy — Especifica la ocupación del material Water en un voxel como un valor entre 0 (sin agua) y 1 (lleno de agua).Si el SolidOccupancy es 1 y el SolidMaterial no es Air , esto será 0.
Valor predeterminado: ""

Devuelve

()

Muestras de código

Terrain:WriteVoxelChannels()

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 cierta región de terreno liso usando el formato de tabla.

Parámetros

region: Region3

Región objetivo para escribir. Debe alinearse con la cuadrícula de vóxeles. Arrojará un error si la región es demasiado grande.

Valor predeterminado: ""
resolution: number

Resolución de vóxel. Debe ser 4.

Valor predeterminado: ""
materials: Array

El array 3D de Enum.Material. Dimensions debe coincidir exactamente con el tamaño de la región objetivo en voxeles.

Valor predeterminado: ""
occupancy: Array

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 voxeles.

Valor predeterminado: ""

Devuelve

()

Muestras de código

Ejemplo

Ejemplo

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)

Many terrain methods throw an error if their given region size is too large. The limit is currently 4194304 voxels^3 for ReadVoxels() and WriteVoxels(), and 67108864 voxels^3 for other methods. For methods that take a cframe + size combination (e.g. FillBlock, FillCylinder etc.), then the region volume is calculated from the AABB of the target area.

Maximum Region Size

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))

WriteVoxelsAsync_beta

Parámetros

region: Region3
Valor predeterminado: ""
resolution: number
Valor predeterminado: ""
channelIds: Array
Valor predeterminado: ""

Devuelve

Eventos