Terrain

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia

Terrain pozwala na tworzenie dynamicznie zmieniających się środowisk z niewielkim lub żadnym lagiem. Jest on oparty na 4×4×4 rasterze komórek, gdzie każda komórka ma numer pomiędzy 0 i 1 reprezentujący to, ile geometria powinna zajmować komórkę, a materiał komórki. Obszar określa, jak komórka będzie się zmieniać wraz z otaczającymi komótkami, a rezultat to il

Dla więcej informacji, see Teren .

Podsumowanie

Właściwości

  • Brak możliwości dodawania do skryptu
    Odczyt równoległy

    Włącza lub wyłącza dekoracje terenu.

  • Brak możliwości dodawania do skryptu
    Odczyt równoległy

    Określa długość animowanej trawy.

  • MaterialColors:BinaryString
    Brak możliwości dodawania do skryptu
    Odczyt równoległy

    KoloryMateriałów reprezentuje edytor dla funkcjaKolor Materiału, i nie może być edytowany przez skrypty .

    Aby uzyskać kolor materiału, użyj: Terrain:GetMaterialColor() Aby ustawić kolor materiału, użyj: Terrain:SetMaterialColor()

  • Tylko do odczytu
    Bez replikacji
    Odczyt równoległy

    Pokazuje granice największego możliwego edytowalnego regionu.

  • Odczyt równoległy

    Kolor wody terenu.

  • Odczyt równoległy

    Kontroluje, jak niewidoczne są odblaski wody terenu.

  • Odczyt równoległy

    Przezroczystość wody terenu.

  • Odczyt równoległy

    Ustawia maksymalną wysokość fal wody terenu w studs.

  • Odczyt równoległy

    Określa, ile razy falami wody terenowej będą się w górę i w dół poruszać za minutę.

Właściwości odziedziczeni z: BasePartWłaściwości odziedziczeni z: PVInstance
  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy
  • Bez replikacji
    Brak możliwości dodawania do skryptu
    Odczyt równoległy

Metody

Metody odziedziczeni z: BasePartMetody odziedziczeni z: PVInstance

Zdarzenia

Zdarzenia odziedziczeni z: BasePart

Właściwości

Decoration

Brak możliwości dodawania do skryptu
Odczyt równoległy

Obecnie włącza lub wyłącza animowaną trawę na materialu Trawa w terenie, choć przyszłe modyfikacje tej właściwości mogą kontrolować dodatkowe funkcje dekoracyjne.

GrassLength

Brak możliwości dodawania do skryptu
Odczyt równoległy

Określa długość animowanej trawy na materialu Trawy , z założeniem, że Decoration jest włączone. Poprawne wartości są pomiędzy 0,1 i 1.

MaterialColors

BinaryString
Brak możliwości dodawania do skryptu
Odczyt równoległy

KoloryMateriałów reprezentuje edytor dla funkcjaKolor Materiału, i nie może być edytowany przez skrypty .

Aby uzyskać kolor materiału użyj: Terrain:GetMaterialColor()

Aby ustawić kolor materiału użyj: Terrain:SetMaterialColor()

MaxExtents

Tylko do odczytu
Bez replikacji
Odczyt równoległy

Pokazuje granice największego możliwego edytowalnego regionu.

WaterColor

Odczyt równoległy

Kolor wody terenu.

WaterReflectance

Odczyt równoległy

Kontroluje, jak niewidoczne są odblaski wody terenu.

WaterTransparency

Odczyt równoległy

Przezroczystość wody terenu.

WaterWaveSize

Odczyt równoległy

Ustawia maksymalną wysokość fal wodnych terenu w studs. Jest to obecnie ograniczone do pomiędzy 0 i 1.

WaterWaveSpeed

Odczyt równoległy

Określa, ile razy falami wody terenowe będą się poruszać w górę i w dół za minutę. Obecnie jest to ograniczone do pomiędzy 0 a 100.

Metody

CellCenterToWorld

Zwraca pozycję świata w centrum komórki terenu (x, y, z).

Parametry


Zwroty

CellCornerToWorld

Zwraca pozycję lewego, dolnego rogu sieci (x, y, z).

Parametry


Zwroty

Clear

void

Wyczyща teren.


Zwroty

void

CopyRegion

Przechowuje kawałek terenu w obiekcie TerrainRegion, aby można go załadować później. Uwaga: dane TerrainRegion nie są replikowane między serwerem a klientem.

Parametry

region: Region3int16

Zwroty

Przykłady kodu

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

Wywraca liczbę niepustych komórek w terenie.


Zwroty

FillBall

void

Wypełnia kulę gładkiego terenu w określonym przestrzeń.

Parametry

center: Vector3

Pozycja centrum kuli terenu.

radius: number

Okrąg w studsach kuli terenowej.

material: Enum.Material

ENSEGMENT.MATERIAL kuli terenu.


Zwroty

void

Przykłady kodu

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

Wypełnia blok gładkiego terenu z określonym położeniem, obrotem, rozmiarem i materiałem.

Parametry

cframe: CFrame

CFrame (pozycja i orientacja) bloku terenu.

size: Vector3

Rozmiar w studsach bloku kwadratowego - zarówno wysokość, jak i szerokość.

material: Enum.Material

ENSEGMENT.MATERIAL terenu.


Zwroty

void

FillCylinder

void

Wypełnia cylinder gładkiego terenu w określonym przestrzeń. Przestrzeń jest zdefiniowana używając CFrame, wysokości i promienia.

Użyj


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

Parametry

cframe: CFrame

CFrame (pozycja i orientacja) tego silnika terenu.

height: number

Wysokość w studsach cylindru terenu.

radius: number

Okrągłość w studsach cylindru terenu.

material: Enum.Material

Encyklopedia materiałów terenu.


Zwroty

void

FillRegion

void

Wypełnia Region3 przestrzeń z gładkim terenem.

Parametry

region: Region3
resolution: number
material: Enum.Material

Zwroty

void

FillWedge

void

FillWedge() wypełnia wolumen w kształcie kлинu z Terrain i dane Enum.Material i obszar 0> Datatype.CFrame0> i rozmiar. Orientacja wolumenu jest taka sama jak równivalentny FillWedge()3> .

Parametry

cframe: CFrame

Pozycja i orientacja krawędzi do wypełnienia.

size: Vector3

Rozmiar kлинu do wypełnienia.

material: Enum.Material

Materiał, z którego wiertło będzie wypełnione.


Zwroty

void

GetMaterialColor

Zapis równoległy

Zwraca aktualny kolor materiału terenu dla określonego materiału terenu.

Parametry

material: Enum.Material

Zwroty

PasteRegion

void

Zastosowuje część terenu do obiektu Terreno. Uwaga: dane Class.TerrainRegion nie są replikowane między serwerem a klientem.

Parametry

corner: Vector3int16
pasteEmptyCells: bool

Zwroty

void

Przykłady kodu

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

Zapis równoległy

Wyświetla regiony danych w postaci wiersza w tabeli w oparciu o nazwy kanałów.

Parametry

region: Region3

Target region to read from. Musi być zgodne z wielkością wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wiel

resolution: number

Rozdzielczość woxela. Musi być 4.

channelIds: Array

Materiały kanałowe (stringi), które muszą być dostępne z danych w woxelu. Każdy identyfikator kanału reprezentuje typ danych, który jest zapisany w woxelu. Obecnie wspierane identyfikatory są {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .


Zwroty

Wyświetla wyniki w postaci wyszukiwarki, w oparciu o wpis channelIds. Klucze reprezentują każdy identyfikator kanału z ich odpowiednim wartością jako matryki 3D.

  • SolidMaterial — materiał Enum.Material w woxelu. Uwaga, że Water nie jest już wspierane; zamiast tego woxel zawierający wodę będzie miał wartość 0> LiquidOccupancy0> .
  • SolidOccupancy — Obszar zajęcia materiału woxela, określony w kanałSolidMaterial. Jest to wartość pomiędzy 0 (próżnia) a 1 (pełne).
  • LiquidOccupancy — określa occupancy enum.material|water materiału w woxelu jako wartość pomiędzy 0 (nie ma wody) a 1 (pełne wody). Jeśli SolidOccupancy jest 1 i SolidMaterial nie jest Enum.Material|Air , to będzie to 0.

Słownik zawiera również Size klucz z wartością reprezentującą rozmiar 3D każdej danej kanału.

Przykłady kodu

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

Zapis równoległy

Wyświetla pewną region nieskazitelną terenu w formie tabeli.

Parametry

region: Region3

Target region to read from. Musi być zgodne z wielkością wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości wielkości

resolution: number

Rozdzielczość woxela. Musi być 4.


Zwroty

Wyświetla dane w postaci czystego woxela jako dwa 3D arrays.

  • materials - 3D阵列 Enum.Material z obszaru docelowego. Zawiera również pola rozmiaru, równe wymiarom zeszywanych listek.
  • occupancies - 3D-maszyna czasowa wartości zajęcia z obszaru docelowego. Zawiera również pola rozmiarów, równe wielkości wielokrotnych maszyn.

Przykłady kodu

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 zastępuje teren pewnego Enum.Material w Region3 innym materiałem. W zasadzie jest to operacja find-and-replace na materiałach Terrain.

Ograniczenia

Podczas wzywania metody resolution parametr musi być dokładnie 4. Ponadto w regionie3 musi być zintegrowany z siecią materiałów terenowych, tj. komponenty minimalnego i maksymalnego punktu regionu3 muszą być dzielne przez 4. Użyj Region3:ExpandToGrid() , aby uczynić region kompatybilnym z tą funkcją.

Parametry

region: Region3

Region, w którym występowaćoperacja zmiany.

resolution: number

Rozdzielczość, w której będzie odbywała miejsceoperacja zmiany; w chwili obecnej musi to być dokładnie 4.

sourceMaterial: Enum.Material

Stary materiał, który zostanie zmieniony.

targetMaterial: Enum.Material

Nowy materiał.


Zwroty

void

Przykłady kodu

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

Ustawia aktualny kolor materiału terenu dla określonego materiału terenu. Materiał terenu będzie zmieniać swój bazowy kolor w kierunku określonego koloru.

Parametry

material: Enum.Material
value: Color3

Zwroty

void

WorldToCell

Zwraca lokalizację komórki sieci, która zawiera punkt pozycja .

Parametry

position: Vector3

Zwroty

WorldToCellPreferEmpty

Zwraca lokalizację komórki sieci, która zawiera pozycję punktu, preferując puste komórki sieci, gdy pozycja jest na krawędzi sieci.

Parametry

position: Vector3

Zwroty

WorldToCellPreferSolid

Zwraca lokalizację komórki sieci, która zawiera pozycję punktu, preferując niepróżnięce komórki sieci, gdy pozycja jest na krawędzi sieci.

Parametry

position: Vector3

Zwroty

WriteVoxelChannels

void

Ustawia obszar terenu używając słownika danych kanałów woxel.

Parametry

region: Region3

Target region to write to. Must be aligned to the voxel grid. Będzie throw an error if region is too large; limit jest obecnie 4194304 voxels³.

resolution: number

Rozdzielczość woxela. Musi być 4.

channels: Dictionary

Słownik danych woxelowych podobny do wartości zwrotnej Class.Terrain:ReadVoxelChannels() . Klucze przedstawiają każdorazowy identyfikator kanału z ich odpowiednim wartością jako matrycy 3D. Słownik może obsługiwać pojedyncze lub wielorazowe wejścia kanału.

  • SolidMaterial — Materiał Enum.Material w voxelu. Uwaga, że Water nie jest już wspierane; zamiast tego w voxelu zawierającym tylko wodę należy wprowadzić jako 0> SolidMaterial = Enum.Material.Air,
  • SolidOccupancy — Okupacja materiału woxela, jak określono w kanałSolidMaterial. To powinno być wartość pomiędzy 0 (próżnia) a 1 (pełne).
  • LiquidOccupancy — określa occupancy enum.material|water materiału w woxelu jako wartość pomiędzy 0 (nie ma wody) a 1 (pełne wody). Jeśli SolidOccupancy jest 1 i SolidMaterial nie jest Enum.Material|Air , to będzie to 0.

Zwroty

void

Przykłady kodu

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

Ustawia pewny obszar gładkiego terenu przy użyciu formatu tabeli.

Parametry

region: Region3

Target region to write to. Must be aligned to the voxel grid. Będzie throw an error if region is too large.

resolution: number

Rozdzielczość woxela. Musi być 4.

materials: Array

3D-układ siatek Enum.Material. Wymiary muszą dokładnie odpowiadać rozmiarowi regionu docelowego w woxelach.

occupancy: Array

3D-układ siatki zajęć woxel (liczba pomiędzy 0 i 1). Wymiary muszą dokładnie odpowiadać rozmiarowi regionu docelowego w woxelach.


Zwroty

void

Przykłady kodu

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

Zdarzenia