Terrain

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile

Il terreno ti consente di creare ambienti dinamici morfabili con poco o nessun ritardo.Attualmente è basato su una griglia 4×4×4 di celle, in cui ogni cellula ha un numero compreso tra 0 e 1 che rappresenta quanto la geometria dovrebbe occupare la cellula e il materiale della cellula.L'occupazione determina come la cellula si trasformerà insieme alle celle circostanti, e il risultato è l'illusione di non avere Vincolodi griglia.

Per maggiori informazioni, vedi Terreno.

Sommario

Proprietà

  • Non programmabile
    Lettura Parallela

    Abilita o disabilita la decorazione del terreno.

  • Non programmabile
    Lettura Parallela

    Specifica la lunghezza dell'erba animata.

  • MaterialColors:BinaryString
    Non programmabile
    Lettura Parallela

    MaterialColors rappresenta l'editor per la ProprietàColore Materiale e non può essere modificato da script .

    Per ottenere il colore di un materiale, usa: Terrain:GetMaterialColor() Per impostare il colore di un materiale, usa: Terrain:SetMaterialColor()

  • Sola Lettura
    Non Replicato
    Lettura Parallela

    Mostra i confini della regione modificabile più grande possibile.

  • Lettura Parallela

    Il tono dell'acqua del terreno.

  • Lettura Parallela

    Controlla quanto sono opache le riflessioni dell'acqua del terreno.

  • Lettura Parallela

    La trasparenza dell'acqua del terreno.

  • Lettura Parallela

    Imposta l'altezza massima delle onde d'acqua del terreno in studs.

  • Lettura Parallela

    Imposta il numero di volte in cui le onde d'acqua del terreno si muovono su e giù per minuto.

Proprietà provenienti da BasePartProprietà provenienti da PVInstance

Metodi

Metodi provenienti da BasePartMetodi provenienti da PVInstance

Eventi

Eventi provenienti da BasePart

Proprietà

Decoration

Non programmabile
Lettura Parallela

Attualmente consente o disabilita l'erba animata sul materiale del terreno Erba , anche se le modifiche future di questa proprietà possono controllare ulteriori caratteristiche decorative.

GrassLength

Non programmabile
Lettura Parallela

Specifica la lunghezza dell'erba animata sul materiale del terreno Erba , supponendo che Decoration sia abilitato. I valori validi sono tra 0.1 e 1.

MaterialColors

BinaryString
Non programmabile
Lettura Parallela

MaterialColors rappresenta l'editor per la ProprietàColore Materiale e non può essere modificato da script .

Per ottenere il colore di un materiale, usa: Terrain:GetMaterialColor()

Per impostare il colore di un materiale, usa: Terrain:SetMaterialColor()

MaxExtents

Sola Lettura
Non Replicato
Lettura Parallela

Mostra i confini della regione modificabile più grande possibile.

WaterColor

Lettura Parallela

Il tono dell'acqua del terreno.

WaterReflectance

Lettura Parallela

Controlla quanto sono opache le riflessioni dell'acqua del terreno.

WaterTransparency

Lettura Parallela

La trasparenza dell'acqua del terreno.

WaterWaveSize

Lettura Parallela

Imposta l'altezza massima delle onde d'acqua del terreno in studs. Questo è attualmente limitato tra 0 e 1.

WaterWaveSpeed

Lettura Parallela

Imposta il numero di volte in cui le onde d'acqua del terreno si muovono su e giù per minuto. Attualmente è limitato tra 0 e 100.

Metodi

CellCenterToWorld

Restituisce la posizione mondiale del centro della cellula del terreno (x, y, z).

Parametri

Valore predefinito: ""
Valore predefinito: ""
Valore predefinito: ""

Restituzioni

CellCornerToWorld

Restituisce la posizione dell'angolo inferiore a sinistra in avanti della celle di griglia (x, y, z).

Parametri

Valore predefinito: ""
Valore predefinito: ""
Valore predefinito: ""

Restituzioni

Clear

()

Pulisce il terreno.


Restituzioni

()

CopyRegion

Memorizza un pezzo di terreno in un oggetto TerrainRegion in modo che possa essere caricato nuovamente in seguito.Nota: TerrainRegion i dati non si replicano tra server e client.

Parametri

region: Region3int16
Valore predefinito: ""

Restituzioni

Campioni di codice

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

Restituisce il numero di celle non vuote nel Terreno.


Restituzioni

FillBall

()

Riempe una palla di terreno liscio in uno Spaziodato.

Parametri

center: Vector3

La posizione del centro della palla del terreno.

Valore predefinito: ""
radius: number

Il raggio in studs della palla del terreno.

Valore predefinito: ""
material: Enum.Material

Il Enum.Material della palla del terreno.

Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Riempe un blocco di terreno liscio con una posizione, una rotazione, una dimensione e un materiale dato.

Parametri

cframe: CFrame

La posizione e l'orientamento del blocco terreno.

Valore predefinito: ""
size: Vector3

La dimensione in studs del blocco quadrato - sia l'altezza che la larghezza.

Valore predefinito: ""
material: Enum.Material

Il Enum.Material del blocco del terreno.

Valore predefinito: ""

Restituzioni

()

FillCylinder

()

Riempe un cilindro di terreno liscio in uno Spaziodato. Lo spazio è definito utilizzando un CFrame, l'altezza e il raggio.


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

Parametri

cframe: CFrame

La posizione e l'orientamento del cilindro del terreno.

Valore predefinito: ""
height: number

L'altezza in studs del cilindro del terreno.

Valore predefinito: ""
radius: number

Il raggio in studs del cilindro del terreno.

Valore predefinito: ""
material: Enum.Material

Il Enum.Material del cilindro del terreno.

Valore predefinito: ""

Restituzioni

()

FillRegion

()

Riempe uno spazio Region3 con terreno liscio.

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
material: Enum.Material
Valore predefinito: ""

Restituzioni

()

FillWedge

()

riempie un volume a forma di cuneo di con il dato e le dimensioni dell'area.L'orientamento del cuneo è lo stesso di un equivalente WedgePart .

Parametri

cframe: CFrame

La posizione e l'orientamento del cuneo da riempire.

Valore predefinito: ""
size: Vector3

La dimensione del cuneo da riempire.

Valore predefinito: ""
material: Enum.Material

Il materiale con cui sarà riempito il cuneo.

Valore predefinito: ""

Restituzioni

()

GetMaterialColor

Scrivi Parallelo

Restituisce il colore del materiale del terreno attuale per il materiale del terreno specificato.

Parametri

material: Enum.Material
Valore predefinito: ""

Restituzioni

PasteRegion

()

Applica un pezzo di terreno all'oggetto Terreno. Nota: TerrainRegion i dati non si replicano tra server e client.

Parametri

Valore predefinito: ""
corner: Vector3int16
Valore predefinito: ""
pasteEmptyCells: boolean
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

Scrivi Parallelo

Restituisce una regione di dati voxel del terreno in formato tabella in base ai nomi dei canali.

Parametri

region: Region3

Regione target da leggere. Deve essere allineata alla griglia di voxel. Lancerà un errore se la regione è troppo grande; il limite attuale è 4194304 voxels³.

Valore predefinito: ""
resolution: number

Risoluzione Voxel. Deve essere 4.

Valore predefinito: ""
channelIds: Array

阵列 di ID del canale (stringhe) che devono essere accessati dai dati del voxel.Ogni ID del canale rappresenta un tipo di dati che viene memorizzato in voxel.Gli ID supportati attuali sono {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .

Valore predefinito: ""

Restituzioni

Restituisce i dati voxel come un dizionario basato sull'input channelIds. Le chiavi rappresentano ciascun ID del canale con il rispettivo valore come un array di dati 3D.

  • SolidMaterial — Il materiale Enum.Material del voxelo.Si noti che Water non è più supportato; invece, un voxel che contiene acqua avrà un valore di LiquidOccupancy .
  • SolidOccupancy — L'occupazione del materiale del voxel come specificato nel canale SolidMaterial. Questo è un valore tra 0 (vuoto) e 1 (pieno).
  • LiquidOccupancy — Specifica l'occupazione del materiale Water in un voxel come valore tra 0 (nessuna acqua) e 1 (pieno di acqua).Se il SolidOccupancy è 1 e il SolidMaterial non è Air, questo sarà 0.

Il dizionario contiene anche una chiave Size con un valore che rappresenta la dimensione dell'array 3D di ciascun dato del canale.

Campioni di codice

Terrain: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

Scrivi Parallelo

Restituisce una certa regione di terreno liscio nel formato tabella.

Parametri

region: Region3

Regione target da leggere. Deve essere allineata alla griglia di voxel. Lancerà un errore se la regione è troppo grande. Il limite è attualmente 4194304 voxels^3.

Valore predefinito: ""
resolution: number

Risoluzione Voxel. Deve essere 4.

Valore predefinito: ""

Restituzioni

Restituisce i dati voxel grezzi come due array 3D.

  • materials - 3D array di Enum.Material dalla zona target. Contiene anche un campo Dimensione, uguale alle dimensioni degli array annidati.
  • occupancies - 3D array di valori di occupazione dall'area target. Contiene anche un campo Dimensione, uguale alle dimensioni degli array annidati.

Campioni di codice

Terrain:ReadVoxels() Code Example

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

()

ReplaceMaterial sostituisce il terreno di un certo Enum.Material all'interno di un Region3 con un altro materiale.Fondamentalmente, è un'operazione di ricerca e sostituzione su Terrain materiali.

Restrizioni

Quando si chiama questo metodo, il parametro resolution deve essere esattamente 4.Inoltre, la Regione3 deve essere allineata alla griglia di materiali del terreno, cioèi componenti dei punti minimi e massimi della Regione3 devono essere divisibili per 4.Usa Region3:ExpandToGrid() per rendere una regione compatibile con questa funzione.

Parametri

region: Region3

La regione in cui Si verificanol'operazione di sostituzione.

Valore predefinito: ""
resolution: number

La risoluzione in cui avrà Postol'operazione di sostituzione; al momento questo deve essere esattamente 4.

Valore predefinito: ""
sourceMaterial: Enum.Material

Il vecchio materiale che deve essere sostituito.

Valore predefinito: ""
targetMaterial: Enum.Material

Il nuovo materiale.

Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Imposta il colore del materiale del terreno attuale per il materiale del terreno specificato. Il materiale del terreno sposterà il suo colore di base verso il colore specificato.

Parametri

material: Enum.Material
Valore predefinito: ""
value: Color3
Valore predefinito: ""

Restituzioni

()

WorldToCell

Restituisce la posizione della celle di griglia che contiene la posizione del punto **** .

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WorldToCellPreferEmpty

Restituisce la posizione della celle di griglia che contiene la posizione del punto, preferendo le celle di griglia vuote quando la posizione è su un bordo di griglia.

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WorldToCellPreferSolid

Restituisce la posizione della celle di griglia che contiene la posizione del punto, preferendo le celle di griglia non vuote quando la posizione è su un bordo di griglia.

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WriteVoxelChannels

()

Imposta una regione del terreno utilizzando un dizionario di dati del canale voxel.

Parametri

region: Region3

Regione target a cui scrivere. Deve essere allineata alla griglia di voxel. Lancerà un errore se la regione è troppo grande; il limite attuale è 4194304 voxels³.

Valore predefinito: ""
resolution: number

Risoluzione Voxel. Deve essere 4.

Valore predefinito: ""
channels: Dictionary

Dizionario di dati voxel simili al valore di ritorno di ReadVoxelChannels() .Le chiavi rappresentano ciascun ID del canale con il rispettivo valore come un array di dati 3D.Il dizionario può supportare input singoli o multipli su più canali.

  • SolidMaterial — Il materiale Enum.Material del voxelo.Si noti che Water non è più supportato; invece, un voxel che contiene solo acqua deve essere inserito come SolidMaterial = Enum.Material.Air, LiquidOccupancy = x , dove x è un numero tra 0 (esclusivo) e 1 (inclusivo).
  • SolidOccupancy — L'occupazione del materiale del voxel come specificato nel canale SolidMaterial. Questo dovrebbe essere un valore tra 0 (vuoto) e 1 (pieno).
  • LiquidOccupancy — Specifica l'occupazione del materiale Water in un voxel come valore tra 0 (nessuna acqua) e 1 (pieno di acqua).Se il SolidOccupancy è 1 e il SolidMaterial non è Air, questo sarà 0.
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Imposta una certa regione di terreno liscio usando il formato di tabella.

Parametri

region: Region3

Regione target a cui scrivere. Deve essere allineata alla griglia di voxel. Mostrerà un errore se la regione è troppo grande.

Valore predefinito: ""
resolution: number

Risoluzione Voxel. Deve essere 4.

Valore predefinito: ""
materials: Array

L'array 3D di Enum.Material. Dimensioni deve corrispondere esattamente alle dimensioni della regione target in voxel.

Valore predefinito: ""
occupancy: Array

阵列 di occupazioni voxel 3D (numbero tra 0 e 1). Le dimensioni devono corrispondere esattamente alle dimensioni della regione target in voxel.

Valore predefinito: ""

Restituzioni

()

Campioni di codice

Example

Example

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

Eventi