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 restrizioni di 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 funzione 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 BasePart

Proprietà

Proprietà provenienti da PVInstance

Proprietà

Metodi

Metodi provenienti da BasePart

Metodi

Metodi provenienti da PVInstance

Metodi

Eventi

Eventi provenienti da BasePart

Eventi

Proprietà

Decoration

Non programmabile
Lettura Parallela

GrassLength

Non programmabile
Lettura Parallela

MaterialColors

BinaryString
Non programmabile
Lettura Parallela

MaxExtents

Sola Lettura
Non Replicato
Lettura Parallela

WaterColor

Lettura Parallela

WaterReflectance

Lettura Parallela

WaterTransparency

Lettura Parallela

WaterWaveSize

Lettura Parallela

WaterWaveSpeed

Lettura Parallela

Metodi

CellCenterToWorld

Parametri

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

Restituzioni

CellCornerToWorld

Parametri

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

Restituzioni

Clear

()

Restituzioni

()

ClearVoxelsAsync_beta

()

Parametri

region: Region3
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

()

CopyRegion

Parametri

region: Region3int16
Valore predefinito: ""

Restituzioni

Campioni di codice

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


Restituzioni

FillBall

()

Parametri

center: Vector3
Valore predefinito: ""
radius: number
Valore predefinito: ""
material: Enum.Material
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Parametri

cframe: CFrame
Valore predefinito: ""
size: Vector3
Valore predefinito: ""
material: Enum.Material
Valore predefinito: ""

Restituzioni

()

FillCylinder

()

Parametri

cframe: CFrame
Valore predefinito: ""
height: number
Valore predefinito: ""
radius: number
Valore predefinito: ""
material: Enum.Material
Valore predefinito: ""

Restituzioni

()

FillRegion

()

Parametri

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

Restituzioni

()

FillWedge

()

Parametri

cframe: CFrame
Valore predefinito: ""
size: Vector3
Valore predefinito: ""
material: Enum.Material
Valore predefinito: ""

Restituzioni

()

GetMaterialColor

Scrivi Parallelo

Parametri

material: Enum.Material
Valore predefinito: ""

Restituzioni

IterateVoxelsAsync_beta

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

ModifyVoxelsAsync_beta

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

PasteRegion

()

Parametri

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

Restituzioni

()

Campioni di codice

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

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

Campioni di codice

Terreno: LeggiVoxelChannels()

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

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""

Restituzioni

Campioni di codice

Terreno:ReadVoxels() Esempio 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 -- Uguale alle occupazioni.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)

ReadVoxelsAsync_beta

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

ReplaceMaterial

()

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
sourceMaterial: Enum.Material
Valore predefinito: ""
targetMaterial: Enum.Material
Valore predefinito: ""

Restituzioni

()

Campioni di codice

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

()

Parametri

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

Restituzioni

()

WorldToCell

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WorldToCellPreferEmpty

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WorldToCellPreferSolid

Parametri

position: Vector3
Valore predefinito: ""

Restituzioni

WriteVoxelChannels

()

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channels: Dictionary
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

()

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
materials: Array
Valore predefinito: ""
occupancy: Array
Valore predefinito: ""

Restituzioni

()

Campioni di codice

Esempio

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

WriteVoxelsAsync_beta

Parametri

region: Region3
Valore predefinito: ""
resolution: number
Valore predefinito: ""
channelIds: Array
Valore predefinito: ""

Restituzioni

Eventi