Terrain
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il terreno ti consente di creare ambienti dinamici con poca o nessuna lag. Attualmente è basato su una griglia di cellule 4×4×4, in cui ogni cellula ha un numero tra 0 e 1 che rappresenta quanto la geometria dovrebbe occupare la cellula e il materiale della cellula. L'occupazione determina il modo in cui la cellula si muove insieme alle cellule circostanti, e il risultato è l'illusione di non avere Vincolodi griglia.
For more information, see Terreno .
Sommario
Proprietà
Abilita o disabilita la decorazione del terreno.
Specifica la lunghezza dell'erba animata.
MaterialColors rappresenta l'editor per la ProprietàMaterial Color, 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()
Mostra i confini della regione più grande possibile da modificare.
Il tono dell'acqua del terreno.
Controlla quanto sono opachi i riflessi dell'acqua del terreno.
La trasparenza dell'acqua del terreno.
Imposta la massima altezza delle onde d'acqua del terreno in studs.
Imposta il numero di volte che le onde di terreno saliranno e scenderanno per minuto.
Determina se una parte è immutabile fisicamente.
La velocità angolare dell'assemblaggio della parte.
Il centro di massa dell'assemblaggio della parte nel Spaziodel mondo.
La velocità lineare dell'assemblaggio della parte.
La massa totale dell'assemblaggio della parte.
Un riferimento alla parte root dell'assemblaggio.
Determina il tipo di superficie per la parte posteriore di una parte (+Z direzione).
Determina il tipo di superficie per la parte inferiore di un'auto (-Y direzione).
Determina il colore di una parte.
Determina la posizione e l'orientamento della BasePart nel Mondo.
Determina se una parte può collisionare con altre parti.
Determina se la parte è considerata durante le operazioni di query spaziale.
Determina se Touched e TouchEnded eventi si attivano sulla parte.
Determina se un part casta un'ombra o no.
Descrive la posizione mondiale in cui si trova il centro di massa di una parte.
Descrivi il nome di un Gruppodi collisione di una parte.
Determina il colore di una parte.
Indica le proprietà fisiche attuali della parte.
Determina diverse proprietà fisiche di una parte.
Utilizzato per abilitare o disabilitare le forze aerodinamiche su parti e assemblaggi.
La dimensione fisica reale della BasePart come vista dal motore fisico.
Determina il tipo di superficie per la parte anteriore di una parte (-Z direzione).
Determina il tipo di superficie per la parte sinistra di un'auto (-X direzione).
Determina un moltiplicatore per BasePart.Transparency che è visibile solo al client locale.
Determina se una parte è selezionabile in Studio.
Descrive la massa della parte, il prodotto della sua densità e volume.
Determina se la parte contribuisce alla massa totale o all'inertia del suo corpo rigido.
Determina le proprietà fisiche predefinite e la texture di una parte.
Il nome di MaterialVariant .
Descrive la rotazione della parte nel Mondo.
Specifica l'Offset del pivot della parte dal suo CFrame .
Descrive la posizione della parte nel Mondo.
Tempo dal prossimo aggiornamento Aggiornarmento.
Determina quanto una parte rifletta la skybox.
Descrive la piccola modifica ammessa dalla metodo Ridimensiona .
Descrive le facce su cui una parte può essere ridimensionata.
Determina il tipo di superficie per il lato destro di una parte (+X direzione).
La regola principale per determinare la parte della radice di un'assemblaggio.
La rotazione della parte in gradi per i tre assi.
Determina le dimensioni di una parte (Lunghezza, larghezza, altezza).
Determina il tipo di superficie per la parte superiore di un'auto (+Y direzione).
Determina quanto una parte può essere vista attraverso (l'inversario dell'opacità della parte).
Metodi
Restituisce la posizione mondiale del centro della cellula del terreno (x, y, z).
Ritorna la posizione dell'angolo in basso a sinistra della griglia (x, y, z).
Rimuove il terreno.
memorizza un pezzo di terreno in un oggetto TerrainRegion in modo che possa essere caricato in seguito. Nota: i dati TerrainRegion non si replicano tra server e client.
Restituisce il numero di cellule non vuote nel Terrain.
Riempe una palla di terreno liso in un certo Spazio.
Riempe un blocco di terreno liso con una posizione, una rotazione, una dimensione e un materiale specificati.
Riempe un cilindro di terreno liso in un certo Spazio.
Riempe un Region3 spazio con terreno liso.
Riempe un volume di forma cuneo del Terreno con il Enum.Material e le dimensioni dell'area.
Restituisce il colore del materiale del terreno corrente per il materiale del terreno specificato.
Applica un pezzo di terreno all'oggetto Terreno. Nota: i dati TerrainRegion non si replicano tra server e client.
Restituisce un'area di dati voxel del terreno in formato tabella in base ai nomi dei canali.
Restituisce una certa regione di terreno liso in formato tavola.
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
Sostituisce il terreno di un materiale all'interno di una regione con un altro materiale.
Imposta il colore del materiale del terreno corrente per il materiale del terreno specificato.
Restituisce la posizione della cellula di griglia che contiene il punto posizione .
Restituisce la posizione della cellula di griglia che contiene la posizione del punto, preferendo le celle di griglia vuote quando la posizione è su un bordo di griglia.
Restituisce la posizione della cellula di griglia che contiene la posizione del punto, preferendo le cellule di griglia non vuote quando la posizione è su un bordo di griglia.
Imposta una regione del terreno utilizzando un dizionario di dati del canale voxel.
Imposta una certa regione di terreno liso utilizzando il formato della tabella.
Applica un impulso angolare all'assemblaggio.
Applica un impulso all'assemblaggio al centro di massa dell'assemblaggio.
Applica un impulso all'assemblaggio nella posizione specificata.
Restituisce se le parti possono collidere tra loro.
Controlla se puoi impostare la proprietà di rete di una parte.
Restituisce una tabella di parti connesse all'oggetto da qualsiasi tipo di Articolazionerigida.
Restituisci tutti i Giunti o Constritti che sono connessi a questa parte.
Restituisce il valore della ProprietàMass .
Restituisce il giocatore corrente che è il proprietario di rete di questa parte, o nulla in caso di Server.
Restituisce vero se il motore di gioco decide automaticamente il proprietario della rete per questa parte.
Restituisce la parte di base di un'assemblazione di parti.
Restituisce una tabella di tutte le parti BasePart.CanCollide vere che interseccano con questa parte.
Restituisce la velocità lineare dell'assemblaggio della parte al posizione specificata rispetto a questa parte.
Restituisce vero se l'oggetto è connesso a una parte che lo contiene (ad esempio, una parte Anchored )), altrimenti restituisce false.
Cambia la dimensione di un oggetto proprio come si fa con lo strumento di ridimensionamento Studio.
Imposta il giocatore attuale come proprietario di rete per questo e tutte le parti connesse.
Lets il motore di gioco decidere dinamicamente chi si occuperà della fisica della parte (uno dei client o il Server).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Crea una nuova IntersectOperation dalla geometria sovrappositiva della parte e dalle altre parti nell'vettorefornito.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Crea una nuova UnionOperation dalla parte, meno la geometria occupata dalle parti nell'vettorefornito.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Crea una nuova UnionOperation dalla parte, oltre alla geometria occupata dalle parti nell'vettorefornito.
Ottiene il pivot di un PVInstance .
Transforms the PVInstance along with all of its descendant PVInstances such that the pivot is now located at the specified CFrame .
Eventi
Eventi provenienti da BasePartSi attiva quando una parte smette di toccare un'altra parte come risultato di un movimento fisico.
Si attiva quando una parte tocca un'altra parte come risultato di un movimento fisico.
Proprietà
Decoration
Consente o disabilita l'erba animata sul terreno Erba , anche se future modifiche di questa proprietà possono controllare ulteriori caratteristiche decorative.
GrassLength
Specifica la lunghezza dell'erba animata sul terreno Erba, supponendo che Decoration sia abilitato. I valori validi sono tra 0,1 e 1.
MaterialColors
MaterialColors rappresenta l'editor per la ProprietàMaterial Color, 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()
WaterWaveSize
Imposta l'altezza massima delle onde dell'acqua nel terreno in studs. Questo è attualmente limitato tra 0 e 1.
WaterWaveSpeed
Imposta il numero di volte che le onde dell'acqua del terreno si muovono su e giù per minuto. Questo è attualmente limitato tra 0 e 100.
Metodi
CellCenterToWorld
Restituisce la posizione mondiale del centro della cellula del terreno (x, y, z).
Parametri
Restituzioni
CellCornerToWorld
Ritorna la posizione dell'angolo in basso a sinistra della griglia (x, y, z).
Parametri
Restituzioni
Clear
Rimuove il terreno.
Restituzioni
CopyRegion
memorizza un pezzo di terreno in un oggetto TerrainRegion in modo che possa essere caricato in seguito. Nota: i dati TerrainRegion non si replicano tra server e client.
Parametri
Restituzioni
Campioni di codice
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
Riempe una palla di terreno liso in un certo Spazio.
Parametri
La posizione del centro della palla di terreno.
Il raggio in studs della palla del terreno.
Il Enum.Material della palla del terreno.
Restituzioni
Campioni di codice
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 liso con una posizione, una rotazione, una dimensione e un materiale specificati.
Parametri
Il cFrame (posizione e orientamento) del blocco di terreno.
La dimensione in studs del blocco quadrato - sia l'altezza che la larghezza.
Il Enum.Material del blocco del terreno.
Restituzioni
FillCylinder
Riempe un cilindro di terreno liso in un certo Spazio. Lo spazio è definito utilizzando CFrame, altezza e raggio.
Uso
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
Parametri
Il CFrame (posizione e orientamento) del terreno цилиндр.
L'altezza nei studs del cilindro di terreno.
Il raggio in studs del cilindro di terreno.
Il Enum.Material del cilindro di terreno.
Restituzioni
FillWedge
FillWedge() Riempe un volume a forma di cuneo di Terrain con il Enum.Material e la zona 0> Datatype.CFrame0> e la dimensione. L'orientamento del cuneo è lo stesso di un'equivalente FillWedge()3> .
Parametri
La posizione e l'orientamento del cuneo da riempire.
La dimensione del cuneo da riempire.
Il materiale con cui verrà riempito il cuneo.
Restituzioni
GetMaterialColor
Restituisce il colore del materiale del terreno corrente per il materiale del terreno specificato.
Parametri
Restituzioni
PasteRegion
Applica un pezzo di terreno all'oggetto Terreno. Nota: i dati TerrainRegion non si replicano tra server e client.
Parametri
Restituzioni
Campioni di codice
--[[
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
Restituisce un'area di dati voxel del terreno in formato tabella in base ai nomi dei canali.
Parametri
Regione di destinazione per la lettura. Deve essere allineato alla griglia voxel. Mostrerà un errore se la regione è troppo grande; il limite è attualmente 4194304 voxels³.
Risoluzione Voxel. Deve essere 4.
Array of channel IDs (stringhe) che deve essere accessato dai dati voxel. Ogni ID del canale rappresenta un tipo di dati che viene memorizzato nel voxel. I ID attualmente supportati sono {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .
Restituzioni
Restituisce i dati voxel come dizionario in base all'input channelIds. I tasti rappresentano ciascun ID del canale con il loro valore rispettivo come un insieme di dati 3D.
- SolidMaterial — Il materiale Enum.Material del voxel. Nota che Water non è più supportato; invece, un voxel che contiene acqua avrà un valore di 0> LiquidOccupancy0> .
- SolidOccupancy — L'occupazione del materiale del voxel come specificato nel canale SolidMaterial. Questo è un valore tra 0 (vuoto) e 1 (completo).
- LiquidOccupancy — Specifica l'occupazione del materiale Water in un voxel come valore tra 0 (senza acqua) e 1 (pieno di acqua). Se il SolidOccupancy è 1 e il 0> SolidMaterial0> non è 3> En
Il dizionario contiene anche una chiave Size con un valore che rappresenta la dimensione 3D dell' array di ciascun datato canale.
Campioni di codice
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
Restituisce una certa regione di terreno liso in formato tavola.
Parametri
Regione di destinazione per la lettura. Deve essere allineato alla griglia voxel. Mostrerà un errore se la regione è troppo grande. Il limite è attualmente 4194304 voxels^3.
Risoluzione Voxel. Deve essere 4.
Restituzioni
Restituisce i dati voxel grezzi come due阵 3D.
- materials - 3D array of Enum.Material from the target area. Also contains a Size field, equal to the dimensions of the nested arrays.
- occupancies - 3D array di valori di occupazione dalla zona di destinazione. Contiene anche un campo di dimensioni, pari alle dimensioni degli array annidati.
Campioni di codice
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 determinato Enum.Material all'interno di un Region3 con un altro materiale. Essenzialmente, è un'operazione di find-and-replace sui materiali Terrain.
Constritti
Quando si chiama questo metodo, il parametro resolution deve essere esattamente 4. Inoltre, la Region3 deve essere allineata alla griglia dei materiali del terreno, cioè i componenti dei punti minimo e massimo della Region3 devono essere divisi per 4. Usa Region3:ExpandToGrid() per rendere una regione compatibile con questa funzione.
Parametri
La regione in cui si Si verificanol'operazione di sostituzione.
La risoluzione a cui si Postol'operazione di sostituzione; al momento deve essere esattamente 4.
Il vecchio materiale che dovrà essere sostituito.
Il nuovo materiale.
Restituzioni
Campioni di codice
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 corrente per il materiale del terreno specificato. Il materiale del terreno cambierà il suo colore di base verso il colore specificato.
Parametri
Restituzioni
WorldToCell
Restituisce la posizione della cellula di griglia che contiene il punto posizione .
Parametri
Restituzioni
WorldToCellPreferEmpty
Restituisce la posizione della cellula di griglia che contiene la posizione del punto, preferendo le celle di griglia vuote quando la posizione è su un bordo di griglia.
Parametri
Restituzioni
WorldToCellPreferSolid
Restituisce la posizione della cellula di griglia che contiene la posizione del punto, preferendo le cellule di griglia non vuote quando la posizione è su un bordo di griglia.
Parametri
Restituzioni
WriteVoxelChannels
Imposta una regione del terreno utilizzando un dizionario di dati del canale voxel.
Parametri
Regione di destinazione per scrivere. Deve essere allineato alla griglia voxel. Mostrerà un errore se la regione è troppo grande; il limite è attualmente 4194304 voxels³.
Risoluzione Voxel. Deve essere 4.
Dizionario dei dati voxel simili al valore di restituzione di ReadVoxelChannels() . Le chiavi rappresentano l'ID di ciascun canale con il loro valore rispettivo come un insieme di dati 3D. Il dizionario può supportare un'ingresso singola o multipla.
- SolidMaterial — Il materiale Enum.Material del voxel. Nota che Water non è più supportato; invece, un voxel che contiene solo acqua dovrebbe essere inserito come 0> SolidMaterial = Enum.Material.Air, LiquidOcc
- SolidOccupancy — L'occupazione del materiale del voxel come specificato nel canale SolidMaterial. Questo dovrebbe essere un valore tra 0 (vuoto) e 1 (completo).
- LiquidOccupancy — Specifica l'occupazione del materiale Water in un voxel come valore tra 0 (senza acqua) e 1 (pieno di acqua). Se il SolidOccupancy è 1 e il 0> SolidMaterial0> non è 3> En
Restituzioni
Campioni di codice
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 liso utilizzando il formato della tabella.
Parametri
Regione di destinazione per scrivere. Deve essere allineato alla griglia voxel. Mostrerà un errore se la regione è troppo grande.
Risoluzione Voxel. Deve essere 4.
3D array of Enum.Material. Le dimensioni devono corrispondere esattamente alle dimensioni della regione target in voxels.
3D array of voxel occupazioni (number between 0 and 1). Le dimensioni devono corrispondere esattamente la dimensione della regione target in voxels.
Restituzioni
Campioni di codice
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))