Terrain

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar

Mit Terrain kannst du dynamisch verwandbare Umgebungen mit wenig bis gar kein Verzögerung erzeugen. Es basiert derzeit auf einer 4×4×4-Gitter von Zellen, in der jede Zelle eine Zahl zwischen 0 und 1 hat, die repräsentiert, wie viel die Geometrie die Zelle einnehmen soll und das Material der Zelle. Die Besetzung bestimmt, wie die Zelle zusammen mit den umgebenden Zellen verwandelt wird, und das Ergebnis ist die Illusion, keine Gitter Beschränkungzu haben.

For more information, see Terrain .

Zusammenfassung

Eigenschaften

  • Nicht skriptfähig
    Parallel lesen

    Aktiviert oder deaktiviert Terrain-Decoration.

  • Nicht skriptfähig
    Parallel lesen

    Gibt die Länge des animierten Grasses an.

  • MaterialColors:BinaryString
    Nicht skriptfähig
    Parallel lesen

    MaterialColors repräsentiert den Editor für die Materialfarbe-Funktion, und kann nicht von Skripten bearbeitet werden .

    Um die Farbe eines Materials zu erhalten, verwenden Sie: Terrain:GetMaterialColor() Um die Farbe eines Materials zu setzen, verwenden Sie: Terrain:SetMaterialColor()

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Zeigt die Grenzen der größten bearbeitbaren Region an.

  • Parallel lesen

    Die Farbe des Terrain-Wassers.

  • Parallel lesen

    Steuert, wie undurchsichtig die Wasserreflexionen des Terrains sind.

  • Die Transparenz der Geländewasser.

  • Parallel lesen

    Setzt die maximale Höhe der Terrain-Wasserwellen in Studs.

  • Parallel lesen

    Setzt die Anzahl der Terrain-Wasserwellen pro Minute, die nach oben und unten bewegen.

Eigenschaften von BasePart übernommen
  • Parallel lesen

    Bestimmt, ob ein Teil auf physikalische Weise unbewegbar ist.

  • Nicht repliziert
    Parallel lesen

    Die angelicale Geschwindigkeit der Montagemaschine.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Die Mitte der Masse der Montagemaschine im Platz.

  • Nicht repliziert
    Parallel lesen

    Die lineare Geschwindigkeit der Montagemaschine.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Die Gesamtmenge der Montagemaschine.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Eine Verweis auf den Wurzelteil der Konfiguration.

  • Bestimmt die Art der Oberfläche für die Rückseite eines Teils (+Z-Richtung).

  • Bestimmt die Art der Oberfläche für das Untergesicht eines Teils (-Y-Richtung).

  • Nicht repliziert
    Parallel lesen

    Bestimmt die Farbe eines Teils.

  • Parallel lesen

    Bestimmt die Position und Ausrichtung der BasePart in der Welt.

  • Parallel lesen

    Bestimmt, ob ein Teil mit anderen Teilen kollidieren kann.

  • Parallel lesen

    Bestimmt, ob das Teil während der räumlichen Anfrage-Operationen betrachtet wird.

  • Parallel lesen

    Bestimmt, ob Touched und TouchEnded Ereignisse auf der Teil abgefeuert werden.

  • Parallel lesen

    Bestimmt, ob ein Teil einen Schatten wirft oder nicht.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt die Weltposition, in der sich der Zentrum eines Teils befindet.

  • Nicht repliziert
    Parallel lesen

    Beschreibt die Name einer Gruppe.

  • Nicht repliziert
    Parallel lesen

    Bestimmt die Farbe eines Teils.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Zeigt die aktuellen physischen Eigenschaften des Teils an.

  • Bestimmt mehrere physikalische Eigenschaften eines Teils.

  • Parallel lesen

    Wird verwendet, um aerodynamische Kräfte auf Teile und Montagen zu aktivieren oder zu deaktivieren.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Das CFrame der physischen Extents von der BasePart .

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Die tatsächliche physische Größe des BasePart als von der Physik-Engine betrachtet.

  • Bestimmt die Art der Oberfläche für die Vorderseite eines Teils (-Z-Richtung).

  • Bestimmt die Art der Oberfläche für die linke Seite eines Teils (-X-Richtung).

  • Verborgen
    Nicht repliziert
    Parallel lesen

    Bestimmt einen Multiplikator für BasePart.Transparency, der nur für den lokalen Client sichtbar ist.

  • Parallel lesen

    Bestimmt, ob ein Teil in Studio auswählbar ist.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt die Masse der Teil, das Produkt seiner Dichte und Volumen.

  • Parallel lesen

    Bestimmt, ob der Teil zur Gesamtmenge oder zur Inaktivität seines Festen Körpers beiträgt.

  • Parallel lesen

    Bestimmt die Textur und die Standard- physischen Eigenschaften eines Teils.

  • Nicht repliziert
    Parallel lesen

    Der Name von MaterialVariant .

  • Verborgen
    Nicht repliziert
    Parallel lesen

    Beschreibt dieRotation der Teil in der Welt.

  • Parallel lesen

    Gibt den Versatz des Teils von seinem CFrame .

  • Verborgen
    Nicht repliziert
    Parallel lesen

    Beschreibt die Position der Teil in der Welt.

  • Verborgen
    Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Zeit seit dem letzten aufgezeichneten Physik-Update.

  • Parallel lesen

    Bestimmt, wie viel ein Teil den Himmelskasten widerspiegelt.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt die kleinste Größenänderung, die durch die Größenanpassungsmethode erlaubt ist.

  • Schreibgeschützt
    Nicht repliziert
    Parallel lesen

    Beschreibt die Gesichter, auf denen ein Teil skaliert werden kann.

  • Bestimmt die Art der Oberfläche für die rechte Seite eines Teils (+X-Richtung).

  • Parallel lesen

    Die Hauptregel bei der Bestimmung des Hauptteils einer Konfiguration.

  • Nicht repliziert
    Parallel lesen

    DieRotation der Teil in Grad für die drei Achsen.

  • Nicht repliziert
    Parallel lesen

    Bestimmt die Dimensionen eines Teils (Länge, Breite, Höhe).

  • Bestimmt die Oberflächenart für die obere Gesichtseite eines Teils (+ Y-Richtung).

  • Parallel lesen

    Bestimmt, wie viel ein Teil durch (den Umkehrwert der Teil-Opakez) gesehen werden kann.

Eigenschaften von PVInstance übernommen

Methoden

Methoden von BasePart übernommenMethoden von PVInstance übernommen

Ereignisse

Ereignisse von BasePart übernommen

Eigenschaften

Decoration

Nicht skriptfähig
Parallel lesen

Aktiviert derzeit entweder animierten Gras auf dem Gras Gelände-Material, oder deaktiviert es, obwohl zukünftige Änderungen dieser Eigenschaft zusätzliche dekorative Funktionen steuern können.

GrassLength

Nicht skriptfähig
Parallel lesen

Gibt die Länge des animierten Grases auf dem Grass Terrain-Material an, unter der Annahme, dass Decoration aktiviert ist. Gültige Werte liegen zwischen 0,1 und 1.

MaterialColors

BinaryString
Nicht skriptfähig
Parallel lesen

MaterialColors repräsentiert den Editor für die Materialfarbe-Funktion, und kann nicht von Skripten bearbeitet werden .

Um die Farbe eines Materials zu erhalten, verwenden Sie: Terrain:GetMaterialColor()

Um die Farbe eines Materials zu setzen, verwenden Sie: Terrain:SetMaterialColor()

MaxExtents

Schreibgeschützt
Nicht repliziert
Parallel lesen

Zeigt die Grenzen der größten bearbeitbaren Region an.

WaterColor

Parallel lesen

Die Farbe des Terrain-Wassers.

WaterReflectance

Parallel lesen

Steuert, wie undurchsichtig die Wasserreflexionen des Terrains sind.

WaterTransparency

Parallel lesen

Die Transparenz der Geländewasser.

WaterWaveSize

Parallel lesen

Setzt die maximale Höhe der Geländewassers Wellen in Studs. Dies ist derzeit auf zwischen 0 und 1 eingeschränkt.

WaterWaveSpeed

Parallel lesen

Setzt die Anzahl der Terrain-Wasserwellen pro Minute, die sich nach oben und unten bewegen. Dies ist derzeit auf zwischen 0 und 100 beschränkt.

Methoden

CellCenterToWorld

Gibt die Weltposition der Mitte der Geländezelle zurück (x, y, z).

Parameter


Rückgaben

CellCornerToWorld

Rückgibt die Position der unteren linken-vorwärts-Ecke des Netzwerks (x, y, z).

Parameter


Rückgaben

Clear

void

Löscht das Gelände.


Rückgaben

void

CopyRegion

Speichert einen Teil des Terrains in einem TerrainRegion -Objekt, sodass er später wieder geladen werden kann. Beachten Sie: TerrainRegion -Daten werden nicht zwischen dem Server und dem Client repliziert.

Parameter

region: Region3int16

Rückgaben

Code-Beispiele

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

Kehre die Anzahl der nicht leeren Zellen im Terrain zurück.


Rückgaben

FillBall

void

Füllt einen Ball mit glattem Terrain in einem bestimmten Platz.

Parameter

center: Vector3

Die Position des Zentrums des Terrain-Balls.

radius: number

Der Radius in Studs der Terrain-Kugel.

material: Enum.Material

Die Enum.Material des Terrain-Balls.


Rückgaben

void

Code-Beispiele

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

void

Füllt einen Block mit glattem Terrain mit einer bestimmten Position, Rotation, Größe und Material.

Parameter

cframe: CFrame

Das cframe (Position und Ausrichtung) des Blöcke.

size: Vector3

Die Größe in Studs des Quadrat-Blocks - sowohl die Höhe als auch die Breite.

material: Enum.Material

Die Enum.Material des Blöcke.


Rückgaben

void

FillCylinder

void

Füllt einen Zylinder mit glattem Terrain in einem bestimmten Platz. Der Raum wird mit einem CFrame, einer Höhe und einem Radius definiert.

Verwendung


workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Parameter

cframe: CFrame

Die CFrame (Position und Ausrichtung) des Terrain-Zylinders.

height: number

Die Höhe in Studs des Terrain-Zylinders.

radius: number

Der Radius in Studs des Terrain-Zylinders.

material: Enum.Material

Die Enum.Material des Terrain-Zylinders.


Rückgaben

void

FillRegion

void

Füllt einen Region3-Raum mit glattem Gelände.

Parameter

region: Region3
resolution: number
material: Enum.Material

Rückgaben

void

FillWedge

void

FillWedge() füllt einen Keil-Volumen von Terrain mit dem gegebenen Enum.Material und dem Bereichs- 0> Datatype.CFrame0> und der Größe. Die Ausrichtung des Keils ist die gleiche wie ein entsprechendes FillWedge()3>.

Parameter

cframe: CFrame

Die Position und Ausrichtung des Keils zum Füllen.

size: Vector3

Die Größe des Keils, der gefüllt werden soll.

material: Enum.Material

Das Material, mit dem der Keil gefüllt wird.


Rückgaben

void

GetMaterialColor

Parallel schreiben

Gibt die aktuelle Gelbemaske für das angegebene Gelände zurück.

Parameter

material: Enum.Material

Rückgaben

PasteRegion

void

Apply aChunk of Terrain to the Terrain Objekt. Note: TerrainRegion data does not replicate between server and client.

Parameter

corner: Vector3int16
pasteEmptyCells: bool

Rückgaben

void

Code-Beispiele

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

Parallel schreiben

Kehre ein Region von Terrain-Voxel-Daten in Tabelle-Form basierend auf Kanal-Namen zurück.

Parameter

region: Region3

Zielregion, von der du lesen kannst. Muss in Richtung des Voxel-Rasters ausgerichtet sein. Wird mit einem Fehler geworfen, wenn die Region zu groß ist; das Limit beträgt derzeit 4194304 Voxel³.

resolution: number

Voxel-Auflösung. Muss 4 sein.

channelIds: Array

Array von Kanal-IDs (Strings), die von den Voxel-Daten aus zugänglich sein müssen. Jeder Kanal-ID repräsentiert einen Typ von Daten, der in Voxel gespeichert ist. Aktuell unterstützte IDs sind {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} , "SolidOccupancy" und "LiquidOccupancy" .


Rückgaben

Rückgibt Voxel-Daten als Wörterbuch basierend auf der channelIds -Eingabe. Schlüssel repräsentieren jeden Kanal-ID mit ihrem jeweiligen Wert als Matrix 3D-Daten.

  • SolidMaterial — Das Material der Enum.Material des Voxels. Beachten Sie, dass Water nicht mehr unterstützt wird; stattdessen hat ein Voxel, der Wasser enthält, einen Wert von 0> LiquidOccupancy0> .
  • SolidOccupancy — Die Besetzung des Materials des Voxels, wie in dem SolidMaterial-Kanal angegeben. Dies ist ein Wert zwischen 0 (leer) und 1 (voll).
  • LiquidOccupancy — gibt die Besetzung des Water-Materials in einem Voxel als Wert zwischen 0 (kein Wasser) und 1 (voller Wasser) an. Wenn die SolidOccupancy 1 und die 0> SolidMaterial0> nicht sind, wird dies 0

Das Wörterbuch enthält auch einen Size-Schlüssel mit einem Wert, der die 3D-Matrixgröße jedes Kanaldatums repräsentiert.

Code-Beispiele

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

Parallel schreiben

Kehre ein bestimmtes Region von glattem Terrain in Tabelle format zurück.

Parameter

region: Region3

Zielregion, von der gelesen werden kann. Muss in Richtung des Voxel-Rasters ausgerichtet sein. Wird ein Fehler geworfen, wenn die Region zu groß ist. Das Limit beträgt derzeit 4194304 Voxel^3.

resolution: number

Voxel-Auflösung. Muss 4 sein.


Rückgaben

Rückgibt rohe Voxel-Daten in zwei 3D-Arrays.

  • materials - 3D-Matrix von Enum.Material aus der Zielbereich. Enthält auch ein Größenfeld, das der Größen der verschachtelten Arrays entspricht.
  • occupancies - 3D-Matrix der Besetzungswerte aus der Zielbereich. Enthält auch ein Feld der Größe, das der Größe der in der Endlichkeit geordneteten Arrays entspricht.

Code-Beispiele

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

void

ReplaceMaterial ersetzt das Terrain eines bestimmten Enum.Material innerhalb eines Region3 mit einem anderen Material. Es ist im Grunde eine Find-and-Replace-Operation auf Terrain-Materialien.

Beschränkungen

Wenn Sie diesen Methoden aufrufen, muss der resolution-Parameter genau 4 sein. Darüber hinaus muss der Region3-Knoten auf das Terrain-Material-Netz ausgerichtet sein, d.h. die Komponenten der Region3's minimum und maximalen Punkte müssen durch 4 aufgeteilt werden. Verwenden Sie Region3:ExpandToGrid(), um eine Region mit dieser Funktion kompatibel zu machen.

Parameter

region: Region3

Die Region, in der die Ersetzung Operation auftreten.

resolution: number

Die Auflösung, bei der die Ersetzungsbetriebs Ortwird; Im Moment muss dies genau 4 sein.

sourceMaterial: Enum.Material

Das alte Material, das ersetzt werden soll.

targetMaterial: Enum.Material

Das neue Material.


Rückgaben

void

Code-Beispiele

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

void

Setzt die aktuelle Geländematerialfarbe für bestimmtes Geländematerial. Das Geländematerial wird seine Basisfarbe in Richtung bestimmter Farbe verschieben.

Parameter

material: Enum.Material
value: Color3

Rückgaben

void

WorldToCell

Rückgibt die Rasterzellen-Position, die den Punkt Position enthält.

Parameter

position: Vector3

Rückgaben

WorldToCellPreferEmpty

Kehre die Position der Rasterzelle zurück, die die Position des Punkts enthält, und bevorzuge leere Rasterzellen, wenn die Position auf einer Rasterkante ist.

Parameter

position: Vector3

Rückgaben

WorldToCellPreferSolid

Kehre die Rasterzelle zurück, die die Position anzeigt, wobei nicht leere Rasterzellen bevorzugt werden, wenn die Position auf einem Rasterkante ist.

Parameter

position: Vector3

Rückgaben

WriteVoxelChannels

void

Setzt einen Region des Terrains mit einer Voxel-Kanal-Daten-Diktion.

Parameter

region: Region3

Zielregion, auf die geschrieben werden soll. Muss mit dem Voxel-Raster in Einklang stehen. Wird einen Fehler anzeigen, wenn die Region zu groß ist; das Limit beträgt derzeit 4194304 Voxel³.

resolution: number

Voxel-Auflösung. Muss 4 sein.

channels: Dictionary

Wörterbuch von Voxel-Daten ähnlich dem Rückgabewert von ReadVoxelChannels() . Die Schlüssel repräsentieren jeden Kanal-ID mit ihrem jeweiligen Wert als Arrangement von 3D-Daten. Das Wörterbuch kann einzelne oder mehrere Kanal-Eingaben unterstützen.

  • SolidMaterial — Das Material der Enum.Material des Voxels. Beachten Sie, dass Water nicht mehr unterstützt wird; stattdessen sollte ein Voxel, der nur Wasser enthält, als 0> SolidMaterial = Enum.Material.Air, LiquidOccupancy = x
  • SolidOccupancy — Die Besetzung des Materials des Voxels, wie in dem SolidMaterial Kanal angegeben. Dies sollte ein Wert zwischen 0 (leer) und 1 (voll) sein.
  • LiquidOccupancy — gibt die Besetzung des Water-Materials in einem Voxel als Wert zwischen 0 (kein Wasser) und 1 (voller Wasser) an. Wenn die SolidOccupancy 1 und die 0> SolidMaterial0> nicht sind, wird dies 0

Rückgaben

void

Code-Beispiele

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

void

Setzt einen bestimmten Bereich des glatten Terrains mit dem Tabelle format.

Parameter

region: Region3

Zielregion, auf die geschrieben werden soll. Muss in das Voxel-Netzwerk ausgerichtet sein. Wird einen Fehler werfen, wenn die Region zu groß ist.

resolution: number

Voxel-Auflösung. Muss 4 sein.

materials: Array

3D-Matrix von Enum.Material. Dimensionen müssen genau der Größe der Zielregion in Voxeln entsprechen.

occupancy: Array

3D-Matrix von Voxel-Belegungen (Nummer zwischen 0 und 1). Dimensionen müssen genau der Größe der Zielregion in Voxeln entsprechen.


Rückgaben

void

Code-Beispiele

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

Ereignisse