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

Terrain ermöglicht es Ihnen, dynamisch veränderliche Umgebungen mit wenig bis keiner Verzögerung zu erstellen.Es basiert derzeit auf einem 4×4×4-Gitter von Zellen, in denen jede Zelle eine Zahl zwischen 0 und 1 hat, die darstellt, wie viel die Geometrie die Zelle einnehmen sollte, und das Material der Zelle.Die Besetzung bestimmt, wie sich die Zelle zusammen mit den umliegenden Zellen verändern wird, und das Ergebnis ist die Illusion, keine Netzwerk-Einschränkung zu haben.

Für weitere Informationen, siehe Terrain.

Zusammenfassung

Eigenschaften

Eigenschaften von BasePart übernommenEigenschaften von PVInstance übernommen

Methoden

Methoden von BasePart übernommenMethoden von PVInstance übernommen

Ereignisse

Ereignisse von BasePart übernommen

Eigenschaften

Decoration

Nicht skriptfähig
Parallel lesen

Aktiviert oder deaktiviert derzeit animiertes Gras auf dem Gras -Terrainmaterial, obwohl zukünftige Änderungen dieser Eigenschaft zusätzliche dekorative Merkmale steuern können.

GrassLength

Nicht skriptfähig
Parallel lesen

Gibt die Länge des animierten Grases auf dem Gras -Terrainmaterial 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 Materialfarbenfunktion und kann nicht von Skripten bearbeitet werden .

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

Um die Farbe eines Materials festzulegen, verwende: Terrain:SetMaterialColor()

MaxExtents

Schreibgeschützt
Nicht repliziert
Parallel lesen

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

WaterColor

Parallel lesen

Die Farbe des Terrainwassers.

WaterReflectance

Parallel lesen

Steuert, wie undurchsichtig die Wasserreflexion des Terrains ist.

WaterTransparency

Parallel lesen

Die Transparenz des Terrainwassers.

WaterWaveSize

Parallel lesen

Legt die maximale Höhe der Geländewasserwellen in Stollen fest. Dies ist derzeit auf zwischen 0 und 1 beschränkt.

WaterWaveSpeed

Parallel lesen

Legt fest, wie oft die Geländewasserwellen pro Minute auf- und absteigen. Dies ist derzeit auf zwischen 0 und 100 beschränkt.

Methoden

CellCenterToWorld

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

Parameter

Standardwert: ""
Standardwert: ""
Standardwert: ""

Rückgaben

CellCornerToWorld

Gibt die Position der unteren linken Vorderkante der Gitterzelle (x, y, z) zurück.

Parameter

Standardwert: ""
Standardwert: ""
Standardwert: ""

Rückgaben

Clear

()

Räumt das Terrain ab.


Rückgaben

()

ClearVoxelsAsync_beta

()

Parameter

region: Region3
Standardwert: ""
channelIds: Array
Standardwert: ""

Rückgaben

()

CopyRegion

Lagert einen Teil des Terrains in ein TerrainRegion Objekt, damit er später wieder geladen werden kann.Hinweis: TerrainRegion Daten werden zwischen Server und Client nicht repliziert.

Parameter

region: Region3int16
Standardwert: ""

Rückgaben

Code-Beispiele

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

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


Rückgaben

FillBall

()

Füllt einen Ball mit glattem Gelände in einem bestimmten Raum.

Parameter

center: Vector3

Die Position des Zentrums des Terrainballs.

Standardwert: ""
radius: number

Der Radius in Klötzen des Geländeballs.

Standardwert: ""
material: Enum.Material

Die Enum.Material des Geländeballs.

Standardwert: ""

Rückgaben

()

Code-Beispiele

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

()

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

Parameter

cframe: CFrame

Die Position und Ausrichtung des Geländeblocks.

Standardwert: ""
size: Vector3

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

Standardwert: ""
material: Enum.Material

Die Enum.Material des Geländeblocks.

Standardwert: ""

Rückgaben

()

FillCylinder

()

Füllt einen Zylinder mit glattem Gelände in einem bestimmten Raum. Der Raum wird mit einem CFrame, Höhe und Radius definiert.


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

Parameter

cframe: CFrame

Die Position und Ausrichtung des Geländezylinders.

Standardwert: ""
height: number

Die Höhe in Stollen des Geländezylinders.

Standardwert: ""
radius: number

Der Radius in Klötzen des Geländezylinders.

Standardwert: ""
material: Enum.Material

Die Enum.Material des Geländezylinders.

Standardwert: ""

Rückgaben

()

FillRegion

()

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

Parameter

region: Region3
Standardwert: ""
resolution: number
Standardwert: ""
material: Enum.Material
Standardwert: ""

Rückgaben

()

FillWedge

()

füllt ein keilförmiges Volumen von mit dem angegebenen und der Größe und dem Bereich der Zone.Die Ausrichtung des Keils ist gleich wie eine entsprechende WedgePart .

Parameter

cframe: CFrame

Die Position und Ausrichtung des Keils zum Ausfüllen.

Standardwert: ""
size: Vector3

Die Größe des Keils zum Ausfüllen.

Standardwert: ""
material: Enum.Material

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

Standardwert: ""

Rückgaben

()

GetMaterialColor

Parallel schreiben

Gibt die aktuelle Geländematerialfarbe für das angegebene Geländematerial zurück.

Parameter

material: Enum.Material
Standardwert: ""

Rückgaben

IterateVoxelsAsync_beta

Parameter

region: Region3
Standardwert: ""
resolution: number
Standardwert: ""
channelIds: Array
Standardwert: ""

Rückgaben

ModifyVoxelsAsync_beta

Parameter

region: Region3
Standardwert: ""
resolution: number
Standardwert: ""
channelIds: Array
Standardwert: ""

Rückgaben

PasteRegion

()

Wendet ein Terrain-Chunk auf das Terrain-Objekt an. Hinweis: TerrainRegion Daten werden zwischen Server und Client nicht repliziert.

Parameter

Standardwert: ""
corner: Vector3int16
Standardwert: ""
pasteEmptyCells: boolean
Standardwert: ""

Rückgaben

()

Code-Beispiele

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

Parallel schreiben

Gibt eine Region von Geländevoxeldaten im Tabellenformat zurück, basierend auf den Kanalnamen.

Parameter

region: Region3

Zielregion zum Lesen. Muss mit dem Voxel-Gitter ausgerichtet sein. Wirft einen Fehler, wenn die Region zu groß ist; die Begrenzung beträgt derzeit 4194304 Voxel³.

Standardwert: ""
resolution: number

Voxel-Auflösung. Muss 4 sein.

Standardwert: ""
channelIds: Array

Array von Kanal-IDs (Schnüren), die vom Voxel-Daten abgerufen werden müssen.Jede Kanal-ID repräsentiert eine Art von Daten, die in Voxel gespeichert wird.Derzeit unterstützte IDs sind {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"}.

Standardwert: ""

Rückgaben

Gibt Voxeldaten als ein Wörterbuch zurück, basierend auf der Eingabe channelIds. Schlüssel repräsentieren jede Kanal-ID mit ihrem jeweiligen Wert als Array von 3D-Daten.

  • SolidMaterial — Das Enum.Material Material des Voxels.Beachte, dass Water nicht mehr unterstützt wird; stattdessen wird ein Voxel, das Wasser enthält, einen Wert von LiquidOccupancy haben.
  • SolidOccupancy — Die Besetzung des Materials des Voxels, wie in dem Kanal SolidMaterial angegeben. Dies ist ein Wert zwischen 0 (leer) und 1 (voll).
  • LiquidOccupancy — Specifiziert die Besetzung des Water Materials in einem Voxel als einen Wert zwischen 0 (kein Wasser) und 1 (voll Wasser).Wenn die SolidOccupancy 1 ist und die SolidMaterial nicht Air ist, wird dies 0 sein.

Das Wörterbuch enthält auch einen Size-Schlüssel mit einem Wert, der die 3D-Arraygröße von jedem Kanaldaten darstellt.

Code-Beispiele

Terrain: LesenVoxelKanale()

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

Gibt eine bestimmte Region glattes Terrain im Tabellenformat zurück.

Parameter

region: Region3

Zielregion zum Lesen. Muss mit dem Voxel-Gitter ausgerichtet sein. Wirft einen Fehler, wenn die Region zu groß ist. Die Grenze ist derzeit 4194304 Voxel^3.

Standardwert: ""
resolution: number

Voxel-Auflösung. Muss 4 sein.

Standardwert: ""

Rückgaben

Gibt rohe Voxel-Daten als zwei 3D-Arrays zurück.

  • materials - 3D-Matrix von Enum.Material aus dem Zielbereich. Enthält auch ein Größenfeld, das den Dimensionen der verschachtelten Arrays entspricht.
  • occupancies - 3D-Matrix der Belegungswerte aus dem Zielbereich. Enthält auch ein Größenfeld, das den Dimensionen der verschachtelten Arrays entspricht.

Code-Beispiele

Terrain:ReadVoxels() Code-Beispiel

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 -- Gleich wie Besetzungen.Größe
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

Parameter

region: Region3
Standardwert: ""
resolution: number
Standardwert: ""
channelIds: Array
Standardwert: ""

Rückgaben

ReplaceMaterial

()

ReplaceMaterial ersetzt das Terrain eines bestimmten Enum.Material innerhalb eines Region3 mit einem anderen Material.Im Wesentlichen ist es eine Find-and-Replace-Operation auf Terrain Materialien.

Einschränkungen

Wenn diese Methode aufgerufen wird, muss der resolution-Parameter genau 4 sein.Zusätzlich muss die Region3 mit dem Geländematerialgitter ausgerichtet werden, d.h.die Komponenten der Mindest- und Höchstpunkte der Region3 müssen durch 4 teilbar sein.Verwende Region3:ExpandToGrid(), um eine Region kompatibel mit dieser Funktion zu machen.

Parameter

region: Region3

Die Region, in der die Ersetzungsoperation stattfinden wird.

Standardwert: ""
resolution: number

Die Auflösung, bei der die Ersetzungsoperation stattfinden wird; im Moment muss es genau 4 sein.

Standardwert: ""
sourceMaterial: Enum.Material

Das alte Material, das ersetzt werden soll.

Standardwert: ""
targetMaterial: Enum.Material

Das neue Material.

Standardwert: ""

Rückgaben

()

Code-Beispiele

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

()

Legt die aktuelle Terrainmaterialfarbe für das angegebene Terrainmaterial fest. Das Terrainmaterial wird seine Basisfarbe in Richtung der angegebenen Farbe verschieben.

Parameter

material: Enum.Material
Standardwert: ""
value: Color3
Standardwert: ""

Rückgaben

()

WorldToCell

Gibt die Position der Rasterzelle zurück, die den Punkt Position enthält.

Parameter

position: Vector3
Standardwert: ""

Rückgaben

WorldToCellPreferEmpty

Gibt die Position der Gitterzelle zurück, die den Punktpunkt enthält, bevorzugt leere Gitterzellen, wenn die Position an einem Gitterrand ist.

Parameter

position: Vector3
Standardwert: ""

Rückgaben

WorldToCellPreferSolid

Gibt die Position der Gitterzelle zurück, die den Punktpunkt enthält, bevorzugt nicht leere Gitterzellen, wenn die Position an einem Gitterrand ist.

Parameter

position: Vector3
Standardwert: ""

Rückgaben

WriteVoxelChannels

()

Legt eine Region des Terrains mit einem Wörterbuch von Voxel-Kanaldaten fest.

Parameter

region: Region3

Zielregion, an die geschrieben werden muss. Muss sich an das Voxel-Gitter anpassen. Wird einen Fehler werfen, wenn die Region zu groß ist; die Begrenzung beträgt derzeit 4194304 Voxel³.

Standardwert: ""
resolution: number

Voxel-Auflösung. Muss 4 sein.

Standardwert: ""
channels: Dictionary

Wörterbuch von Voxel-Daten ähnlich wie die Rückgabewert von ReadVoxelChannels().Schlüssel repräsentieren jede Kanal-ID mit ihrem jeweiligen Wert als Array von 3D-Daten.Das Wörterbuch kann einzelne oder mehrere Kanaleingänge unterstützen.

  • SolidMaterial — Das Enum.Material Material des Voxels.Beachten Sie, dass Water nicht mehr unterstützt wird; stattdessen sollte ein Voxel, das nur Wasser enthält, als SolidMaterial = Enum.Material.Air, LiquidOccupancy = x eingegeben werden, wo x eine Zahl zwischen 0 (exklusiv) und 1 (inklusiv) ist.
  • SolidOccupancy — Die Besetzung des Materials des Voxels, wie in dem Kanal SolidMaterial angegeben. Dies sollte ein Wert zwischen 0 (leer) und 1 (voll) sein.
  • LiquidOccupancy — Specifiziert die Besetzung des Water Materials in einem Voxel als einen Wert zwischen 0 (kein Wasser) und 1 (voll Wasser).Wenn die SolidOccupancy 1 ist und die SolidMaterial nicht Air ist, wird dies 0 sein.
Standardwert: ""

Rückgaben

()

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

()

Legt eine bestimmte Region glattes Terrains mit Tabellenformat fest.

Parameter

region: Region3

Zielregion, zu der geschrieben werden muss. Muss sich an das Voxel-Gitter anpassen. Wirft einen Fehler, wenn die Region zu groß ist.

Standardwert: ""
resolution: number

Voxel-Auflösung. Muss 4 sein.

Standardwert: ""
materials: Array

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

Standardwert: ""
occupancy: Array

3D-Matrix der Voxelbesetzungen (Zahl zwischen 0 und 1). Die Dimensionen müssen genau der Größe der Zielregion in Voxeln entsprechen.

Standardwert: ""

Rückgaben

()

Code-Beispiele

Beispiel

Beispiel

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

Parameter

region: Region3
Standardwert: ""
resolution: number
Standardwert: ""
channelIds: Array
Standardwert: ""

Rückgaben

Ereignisse