Terrain
*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.
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
Włącza lub wyłącza dekoracje terenu.
Określa długość animowanej trawy.
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()
Pokazuje granice największego możliwego edytowalnego regionu.
Kolor wody terenu.
Kontroluje, jak niewidoczne są odblaski wody terenu.
Przezroczystość wody terenu.
Ustawia maksymalną wysokość fal wody terenu w studs.
Określa, ile razy falami wody terenowej będą się w górę i w dół poruszać za minutę.
Określa, czy część jest nieprzenośna z punktu widzenia fizyki.
Prędkość kątowa zgromadzenia części.
Centrum masy części w przestrzeni świata.
Liniowa prędkość montażu części.
Całkowita masa zgromadzenia części.
Odniesienie do korzenia części zestawu.
Określa rodzaj powierzchni dla oblicza tylnego części (+Z kierunek).
Określa rodzaj powierzchni dla dolnej strony części (-Y kierunek).
Określa kolor części.
Określa pozycję i orientację BasePart w świecie.
Określa, czy część może uderzyć z innymi częściami.
Określa, czy część jest uważana podczas operacji zapytania przestrzeni.
Określa, czy Touched i TouchEnded wydarzenia w części.
Określa, czy część tworzy cień lub nie.
Opisuje pozycję świata, w której znajduje się centrum masy części.
Opisuje nazwę grupakolizji części.
Określa kolor części.
Wskazuje bieżące właściwości fizyczne części.
Określa kilka fizycznych właściwości części.
Używany do włączenia lub wyłączenia sił aerodynamicznych na częściach i zestawach.
Datatype.CFrame fizycznych składek BasePart .
Fizyczna wielkość BasePart wg fizyki.
Określa rodzaj powierzchni dla Strony Frontowej części (-Z kierunek).
Określa rodzaj powierzchni dla lewej strony części (-X kierunek).
Określa mnożnik dla BasePart.Transparency, który jest widoczny tylko dla lokalnego klienta.
Określa, czy część może być wybrana w Studio.
Opisuje masę części, produkt jego gęstości i objętości.
Określa, czy część przyczynia się do całkowitej masy lub inercji jego elastycznego ciało.
Określa teksturę i domyślną fizyczną właściwość części.
Nazwa MaterialVariant .
Opisuje rotację części w świecie.
Określa przesunięcie pivot części z jej CFrame .
Opisuje pozycję części w świecie.
Czas od ostatniego zapisu aktualizacja.
Określa, jak wiele części odzwierciedla niebo.
Opisuje najmniejszą zmianę w rozmiarze możliwą za pomocą metody zmiany rozmiarów.
Opisuje oblicza, na których można zmniejszyć część.
Określa rodzaj powierzchni dla prawego oblicza części (+X kierunek).
Główna zasada określania głównej części zestawienia.
Rotacja części w stopniach dla trzech osi.
Określa wielkość części (długość, szerokość, wysokość).
Określa rodzaj powierzchni dla oblicza góry części (+Y kierunek).
Określa, ile części można zobaczyć poprzez (przeciwieństwo nieprzezroczystości części).
Metody
Zwraca pozycję świata w centrum komórki terenu (x, y, z).
Zwraca pozycję lewego, dolnego rogu sieci (x, y, z).
Wyczyща teren.
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.
Wywraca liczbę niepustych komórek w terenie.
Wypełnia kulę gładkiego terenu w określonym przestrzeń.
Wypełnia blok gładkiego terenu z określonym położeniem, obrotem, rozmiarem i materiałem.
Wypełnia cylinder gładkiego terenu w określonym przestrzeń.
Wypełnia Region3 przestrzeń z gładkim terenem.
Wypełnia Enum.Material z terenu z użyciem danych Material i wymiaru CFrame i Size obszaru.
Zwraca bieżący kolor materiału terenu dla określonego materiału terenu.
Zastosowuje część terenu do obiektu Terreno. Uwaga: dane Class.TerrainRegion nie są replikowane między serwerem a klientem.
Wyświetla regiony danych w postaci wiersza w tabeli w oparciu o nazwy kanałów.
Wyświetla pewną region nieskazitelną terenu w formie tabeli.
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
Zastępuje teren materiału w regionie innym materiałem.
Ustawia aktualny kolor materiału terenu dla określonego materiału terenu.
Zwraca lokalizację komórki sieci, która zawiera punkt pozycja .
Zwraca lokalizację komórki sieci, która zawiera pozycję punktu, preferując puste komórki sieci, gdy pozycja jest na krawędzi sieci.
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.
Ustawia obszar terenu używając słownika danych kanałów woxel.
Ustawia pewny obszar gładkiego terenu przy użyciu formatu tabeli.
Zastosuj impuls kątowy do zgromadzenia.
Zastosuj impuls do zgromadzenia w centrum zgromadzenia.
Zastosuj impuls do zgromadzenia na określonym położeniu.
Zwraca, czy części mogą uderzać ze sobą.
Sprawdza, czy możesz ustawić własność sieci części.
Zwraca tabelę części połączonych z obiektem za pomocą dowolnego rodzaju łączników elastycznych.
Zwróć wszystkie Współczynniki lub ograniczenia, które są powiązane z tym elementem.
Zwraca wartość właściwości Mass.
Zwraca bieżącego gracza, który jest właścicielem sieci w tej części, lub zero w przypadku serwera.
Wróщает prawdę, jeśli silnik gry automatycznie zdecyduje o właścicielu sieci dla tej części.
Zwraca podstawową część zestawu części.
Wywraca tabelę wszystkich BasePart.CanCollide prawdziwych części, które się z tym elementem łączą.
Zwraca liniową prędkość zgromadzenia części w danej pozycji w stosunku do tej części.
Wyświetla prawdę, jeśli obiekt jest połączony z częścią, która go utrzyma w miejscu (na przykład część Anchored), w innym wypadku wyświetla fałszywie.
Zmienia rozmiar obiektu, tak jak używając narzędzia Studio do zmiany rozmiarów.
Ustawia podanego gracza jako właściciela sieci dla tego i wszystkich połączonych części.
Pozwala silnikowi gry dynamicznie zdecydować, kto będzie odpowiadał za fizykę części (jednego z klientów lub serwera).
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy IntersectOperation z geometrią wstępującą z części i innych części w podanym maszynie.
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Utworzy nowy UnionOperation z części, odejmując geometrię zajętą przez części w podanym maszynie.
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
Tworzy nowy UnionOperation z części, plus geometrię zajętą przez części w podanym массиве.
Zdobadza pivot Class.PVInstance .
Transformuje PVInstance wraz z wszystkimi jego potomnymi PVInstances, tak aby pivot teraz znajdował się w CFrame .
Zdarzenia
Zdarzenia odziedziczeni z: BasePartWystrzela, gdy część przestaje dotykać innej części w wyniku ruchu fizycznego.
Występuje po dotknięciu części przez inną część w wyniku ruchu fizycznego.
Właściwości
Decoration
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
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
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()
WaterWaveSize
Ustawia maksymalną wysokość fal wodnych terenu w studs. Jest to obecnie ograniczone do pomiędzy 0 i 1.
WaterWaveSpeed
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
Wyczyща teren.
Zwroty
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
Zwroty
Przykłady kodu
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
Wypełnia kulę gładkiego terenu w określonym przestrzeń.
Parametry
Pozycja centrum kuli terenu.
Okrąg w studsach kuli terenowej.
ENSEGMENT.MATERIAL kuli terenu.
Zwroty
Przykłady kodu
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
Wypełnia blok gładkiego terenu z określonym położeniem, obrotem, rozmiarem i materiałem.
Parametry
CFrame (pozycja i orientacja) bloku terenu.
Rozmiar w studsach bloku kwadratowego - zarówno wysokość, jak i szerokość.
ENSEGMENT.MATERIAL terenu.
Zwroty
FillCylinder
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 (pozycja i orientacja) tego silnika terenu.
Wysokość w studsach cylindru terenu.
Okrągłość w studsach cylindru terenu.
Encyklopedia materiałów terenu.
Zwroty
FillWedge
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
Pozycja i orientacja krawędzi do wypełnienia.
Rozmiar kлинu do wypełnienia.
Materiał, z którego wiertło będzie wypełnione.
Zwroty
GetMaterialColor
Zwraca aktualny kolor materiału terenu dla określonego materiału terenu.
Parametry
Zwroty
PasteRegion
Zastosowuje część terenu do obiektu Terreno. Uwaga: dane Class.TerrainRegion nie są replikowane między serwerem a klientem.
Parametry
Zwroty
Przykłady kodu
--[[
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
Wyświetla regiony danych w postaci wiersza w tabeli w oparciu o nazwy kanałów.
Parametry
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
Rozdzielczość woxela. Musi być 4.
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
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
Wyświetla pewną region nieskazitelną terenu w formie tabeli.
Parametry
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
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
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 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, w którym występowaćoperacja zmiany.
Rozdzielczość, w której będzie odbywała miejsceoperacja zmiany; w chwili obecnej musi to być dokładnie 4.
Stary materiał, który zostanie zmieniony.
Nowy materiał.
Zwroty
Przykłady kodu
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
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
Zwroty
WorldToCell
Zwraca lokalizację komórki sieci, która zawiera punkt pozycja .
Parametry
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
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
Zwroty
WriteVoxelChannels
Ustawia obszar terenu używając słownika danych kanałów woxel.
Parametry
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³.
Rozdzielczość woxela. Musi być 4.
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
Przykłady kodu
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
Ustawia pewny obszar gładkiego terenu przy użyciu formatu tabeli.
Parametry
Target region to write to. Must be aligned to the voxel grid. Będzie throw an error if region is too large.
Rozdzielczość woxela. Musi być 4.
3D-układ siatek Enum.Material. Wymiary muszą dokładnie odpowiadać rozmiarowi regionu docelowego w woxelach.
3D-układ siatki zajęć woxel (liczba pomiędzy 0 i 1). Wymiary muszą dokładnie odpowiadać rozmiarowi regionu docelowego w woxelach.
Zwroty
Przykłady kodu
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))