Terrain

사용되지 않는 항목 표시

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

만들 수 없음

지형은 작은 지연을 가진 동적으로 변형 가능한 환경을 만들 수 있습니다. 현재 4×4×4 그리드의 셀로 구성되어 있으며, 각 셀에는 0에서 1 사이의 숫자가 있습니다. 이 숫자는 지오메트리가 셀을 차지하는 양과 재료를 나타냅니다. 이 재료는

자세한 내용은 지형을 참조하십시오.

요약

속성

  • 스크립팅할 수 없음
    병렬 읽기

    지형 장식을 활성화 또는 비활성화합니다.

  • 스크립팅할 수 없음
    병렬 읽기

    애니메이션 잔디의 길이를 지정합니다.

  • MaterialColors:BinaryString
    스크립팅할 수 없음
    병렬 읽기

    MaterialColors 재료 색상 기능에 대한 편집기를 나타내며 스크립트에 의해 편집할 수 없습니다.

    재료의 색을 가져오려면: Terrain:GetMaterialColor() 를 사용합니다. 재료의 색을 설정하려면: Terrain:SetMaterialColor()

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    가장 큰 편집 가능한 영역의 경계를 표시합니다.

  • 병렬 읽기

    지형 물의 색조.

  • 지형의 물 반사를 얼마나 불투명하게 합니다.

  • 지형 물의 투명도.

  • 병렬 읽기

    지형 물결의 최대 높이를 스터드 단위로 설정합니다.

  • 병렬 읽기

    지형 물결이 분당마다 상승하고 하강하는 횟수를 설정합니다.

속성BasePart에서 상속되었습니다
  • 병렬 읽기

    물리적으로 부품이 움직일 수 없는지 여부를 결정합니다.

  • 복제되지 않음
    병렬 읽기

    부품 조립의 각도 속도.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품 조립의 중심 공간.

  • 복제되지 않음
    병렬 읽기

    부품 조립의 직선 속도.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품 조립의 총 질량.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    조립의 루트 부분에 대한 참조.

  • 부품의 뒷면 표면 유형을 결정합니다 (+Z 방향).

  • 부품의 하단 면에 대한 표면 유형을 결정합니다(Y 방향).

  • 복제되지 않음
    병렬 읽기

    부품의 색을 결정합니다.

  • 병렬 읽기

    세계에서 BasePart의 위치 및 방향을 결정합니다.

  • 병렬 읽기

    부품이 다른 부품과 충돌할 수 있는지 여부를 결정합니다.

  • 병렬 읽기

    공간 쿼리 작업 중에 부품이 고려되는지 여부를 결정합니다.

  • 병렬 읽기

    부품에 화재가 발생하는지 여부를 결정합니다. TouchedTouchEnded 이벤트가 부품에서 발생하는지 여부를 결정합니다.

  • 병렬 읽기

    부품이 그림자를 캐스트하는지 여부를 결정합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품의 중심 마사가 위치한 세계 위치를 설명합니다.

  • 복제되지 않음
    병렬 읽기

    부품 충돌 그룹의 이름을 설명합니다.

  • 복제되지 않음
    병렬 읽기

    부품의 색을 결정합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품의 현재 물리적 속성을 나타냅니다.

  • 부품의 여러 물리적 속성을 결정합니다.

  • 병렬 읽기

    부품 및 조립에 대한 공기 동력 힘을 활성화하거나 비활성화합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    물리적 엔터티의 CFrame 의 물리적 부분입니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    물리적 엔진에 의해 보는 BasePart의 실제 크기.

  • 부품의 앞면에 대한 표면 유형을 결정합니다(Z 방향).

  • 부품의 왼쪽 표면 유형을 결정합니다(ـX 방향).

  • 숨김
    복제되지 않음
    병렬 읽기

    로컬 클라이언트에만 표시되는 BasePart.Transparency 의 배수를 결정합니다.

  • 병렬 읽기

    Studio에서 부품을 선택할 수 있는지 여부를 결정합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품의 질량, 밀도 및 볼륨의 제품을 설명합니다.

  • 병렬 읽기

    부품이 유연 신체총 질량이나 비활성에 기여하는지 여부를 결정합니다.

  • 병렬 읽기

    부품의 텍스처 및 기본 물리 속성을 결정합니다.

  • 복제되지 않음
    병렬 읽기

    Class.MaterialVariant 의 이름.

  • 숨김
    복제되지 않음
    병렬 읽기

    부품의 회전을 설명합니다.

  • 병렬 읽기

    부품의 피벗 오프셋을 지정합니다. CFrame 에서.

  • 숨김
    복제되지 않음
    병렬 읽기

    세계의 부품 위치를 설명합니다.

  • 숨김
    읽기 전용
    복제되지 않음
    병렬 읽기

    마지막으로 기록된 물리 업데이트 이후의 시간.

  • 병렬 읽기

    부품이 하늘 상자를 얼마나 반영하는지 결정합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    크기 조정 메서드에 의해 허용되는 가장 작은 변경 내용을 설명합니다.

  • 읽기 전용
    복제되지 않음
    병렬 읽기

    부품의 크기를 조정할 수 있는 얼굴을 설명합니다.

  • 부품의 오른쪽 면에 대한 표면 유형을 결정합니다 (+X 방향).

  • 병렬 읽기

    조립의 뿌리 부분을 결정하는 주요 규칙입니다.

  • 복제되지 않음
    병렬 읽기

    부품의 회전은 세 축에 대한 도 단위입니다.

  • 복제되지 않음
    병렬 읽기

    부품의 크기 (길이, 너비, 높이)를 결정합니다.

  • 부품의 상단 면에 대한 표면 유형을 결정합니다 (+Y 방향).

  • 병렬 읽기

    부품의 불투명도(부품 불투명도의 부품 반대)를 결정하는 방법을 결정합니다.

속성PVInstance에서 상속되었습니다

메서드

메서드BasePart에서 상속되었습니다메서드PVInstance에서 상속되었습니다

이벤트

이벤트BasePart에서 상속되었습니다

속성

Decoration

스크립팅할 수 없음
병렬 읽기

현재 잔디 지형 재료에 애니메이션 잔디를 활성화하거나 비활성화하지만, 이 속성의 미래 변경으로 인해 장식용 기능을 더 제어할 수 있습니다.

GrassLength

스크립팅할 수 없음
병렬 읽기

잔디 지형 재료에 대한 애니메이션 잔디의 길이를 지정하십시오, Decoration가 활성화된 경우). 유효한 값은 0.1에서 1 사이입니다.

MaterialColors

BinaryString
스크립팅할 수 없음
병렬 읽기

MaterialColors 재료 색상 기능에 대한 편집기를 나타내며 스크립트에 의해 편집할 수 없습니다.

재료의 색을 가져오려면: Terrain:GetMaterialColor()

재료의 색을 설정하려면: Terrain:SetMaterialColor()

MaxExtents

읽기 전용
복제되지 않음
병렬 읽기

가장 큰 편집 가능한 영역의 경계를 표시합니다.

WaterColor

병렬 읽기

지형 물의 색조.

WaterReflectance

병렬 읽기

지형의 물 반사를 얼마나 불투명하게 합니다.

WaterTransparency

병렬 읽기

지형 물의 투명도.

WaterWaveSize

병렬 읽기

지형 물결의 최대 높이를 스터드 단위로 설정합니다. 현재 0에서 1 사이에 제한됩니다.

WaterWaveSpeed

병렬 읽기

지형 물결이 분당마다 얼마나 이동하는지 설정합니다. 현재 0에서 100 사이에 제한됩니다.

메서드

CellCenterToWorld

지형 세포의 중심 위치(x, y, z)를 반환합니다.

매개 변수


반환

CellCornerToWorld

그리드 셀의 왼쪽 하단 모서리 위치(x, y, z)를 반환합니다.

매개 변수


반환

Clear

void

지형을 지웁니다.


반환

void

CopyRegion

지형의 일부를 TerrainRegion 개체에 저장하여 나중에 불러올 수 있습니다. 참고: TerrainRegion 데이터는 서버와 클라이언트 간에 복제되지 않습니다.

매개 변수

region: Region3int16

반환

코드 샘플

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

지형에 있는 비 비어 있는 셀의 개수를 반환합니다.


반환

FillBall

void

지정된 공간에 부드러운 지형 공을 채웁니다.

매개 변수

center: Vector3

지형 공의 중심 위치.

radius: number

지형 공의 스터드 반경.

material: Enum.Material

지형 공의 Enum.Material.


반환

void

코드 샘플

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

지정된 위치, 회전, 크기 및 재료로 부드러운 지형 블록을 채웁니다.

매개 변수

cframe: CFrame

지형 블록의 cframe(위치 및 방향).

size: Vector3

사각 블록의 크기 - 높이와 너비입니다.

material: Enum.Material

지형 블록의 Enum.Material입니다.


반환

void

FillCylinder

void

지정된 공간에 부드러운 지형의 실린더를 채웁니다. 공간은 CFrame, 높이 및 반경을 사용하여 정의됩니다.

사용


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

매개 변수

cframe: CFrame

지형 실린더의 CFrame(위치 및 방향).

height: number

지형 실린더의 높이입니다.

radius: number

지형 실린더의 스터드 반경.

material: Enum.Material

지형 실린더의 Enum.Material입니다.


반환

void

FillRegion

void

부드러운 지형으로 Region3 공간을 채웁니다.

매개 변수

region: Region3
resolution: number
material: Enum.Material

반환

void

FillWedge

void

FillWedge() 는 지정된 Terrain 의 쐐기 모양 볼륨을 채우고, 주어진 Enum.Material 및 지역의 0> Datatype.CFrame0> 와 크기로 구성됩니다. 쐐기의 방향은 동일한 쐐기 3>Class.

매개 변수

cframe: CFrame

채우는 쐐기의 위치 및 방향.

size: Vector3

채우는 쐐기의 크기.

material: Enum.Material

쐐기가 채워질 재료.


반환

void

GetMaterialColor

병렬 쓰기

지정된 지형 재료의 현재 지형 재료 색을 반환합니다.

매개 변수

material: Enum.Material

반환

PasteRegion

void

지형 개체에 일부 지형을 적용합니다. 참고: TerrainRegion 데이터는 서버와 클라이언트 간에 복제되지 않습니다.

매개 변수

corner: Vector3int16
pasteEmptyCells: bool

반환

void

코드 샘플

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

병렬 쓰기

채널 이름에 따라 지형 복셀 데이터의 영역을 테이블 형식으로 반환합니다.

매개 변수

region: Region3

읽을 대상 지역. 복셀 그리드에 맞춰야 합니다. 지역이 너무 크면 오류가 발생합니다. 현재 값은 4194304 복셀 3개입니다.

resolution: number

복셀 해상도. 4여야 합니다.

channelIds: Array

복셀 데이터에서 액세스해야 하는 채널 ID 배열(문자열). 각 채널 ID는 복셀에 저장된 데이터 유형을 나타냅니다. 현재 지원되는 ID는 {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"}입니다.


반환

입력의 channelIds 기반으로 복셀 데이터를 사전으로 반환합니다. 키는 각 채널 ID에 해당하는 값을 3D 데이터 배열로 나타냅니다.

  • SolidMaterial — 복셀의 재료입니다. Enum.Material 는 더 이상 지원되지 않습니다; 대신, 물을 포함하는 복셀이 가진 값은 Water 입니다.
  • SolidOccupancy — 채널 SolidMaterial에 지정된 복셀 재료의 점유량. 이 값은 0(Empty)과 1(Full) 사이의 값입니다.
  • LiquidOccupancy — 솔리드 재료의 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재

사전에는 각 채널 데이터의 3D 배열 크기를 나타내는 값이 포함되어 있습니다. Size 키가 있습니다.

코드 샘플

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

병렬 쓰기

테이블 형식으로 특정 지역의 부드러운 지형을 반환합니다.

매개 변수

region: Region3

읽을 대상 지역. 복셀 그리드에 맞춰야 합니다. 지역이 너무 크면 오류가 발생합니다. 현재 제한은 4194304 복셀^3입니다.

resolution: number

복셀 해상도. 4여야 합니다.


반환

원시 복셀 데이터를 두 개의 3D 배열로 반환합니다.

  • materials - 대상 영역의 3D 배열 Enum.Material 에서 크기 필드가 포함되어 있습니다. 또한 중첩된 배열의 크기와 같은 크기 필드를 포함합니다.
  • occupancies - 대상 영역의 3D 배열 값. 또한 크기 필드가 포함되어 있습니다. 크기 필드는 중첩 배열의 크기와 같습니다.

코드 샘플

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 는 특정 Enum.Material``Datatype.Region3 내의 다른 재료로 찾아 대체 작업을 수행합니다. 기본적으로, 이것은 Terrain 재료에 대한 검색 및 대체 작업입니다.

제약 사항

이 메서드를 호출할 때 resolution 매개 변수는 정확히 4여야 합니다. 또한, 지역 3의 최소 및 최대 점 구성 요소는 지형 재료 그리드에 정렬해야 하며, 이는 지역 3의 최소 점 및 최대 점의 구성 요소를 4개로 나눌 수 있습니다. 이

매개 변수

region: Region3

교체 작업이 발생지역입니다.

resolution: number

교체 작업이 플레이스해상도; 현재 이것은 정확히 4여야 합니다.

sourceMaterial: Enum.Material

교체할 오래된 재료.

targetMaterial: Enum.Material

새로운 재료.


반환

void

코드 샘플

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

지정된 지형 재료에 대한 현재 지형 재료 색상을 설정합니다. 지형 재료는 기본 색상을 지정된 색상으로 변경합니다.

매개 변수

material: Enum.Material
value: Color3

반환

void

WorldToCell

위치 가 포함된 그리드 셀 위치를 반환합니다.

매개 변수

position: Vector3

반환

WorldToCellPreferEmpty

위치가 그리드 모서리에 있을 때 포인트 위치를 포함하는 그리드 셀 위치를 반환합니다.

매개 변수

position: Vector3

반환

WorldToCellPreferSolid

위치가 그리드 모서리에 있을 때 포인트 위치를 포함하는 그리드 셀 위치를 반환합니다.

매개 변수

position: Vector3

반환

WriteVoxelChannels

void

복셀 채널 데이터 사전을 사용하여 지역을 설정합니다.

매개 변수

region: Region3

기록할 대상 지역. 복셀 그리드에 맞춰야 합니다. 지역이 너무 크면 오류가 발생합니다. 현재 제한은 4194304 복셀입니다.

resolution: number

복셀 해상도. 4여야 합니다.

channels: Dictionary

Class.Terrain:ReadVoxelChannels()|ReadVoxelChannels()의 반환 값과 같은 복셀 데이터 디쿠버전. 키는 각 채널 ID를 배열 3D 데이터로 표시합니다. 디쿠버는 단일 또는 여러 채널 입력을 지원할 수 있습니다.

  • SolidMaterial — 복셀의 재료입니다. Enum.Material 은 더 이상 지원되지 않습니다; 대신, 수만 개의 물을 포함하는 복셀이 입력되어야 합니다. SolidMaterial = Enum.Material.
  • SolidOccupancy — 채널 SolidMaterial에 지정된 복셀 재료의 점유량. 이 값은 0(공백)과 1(가득) 사이의 값이어야 합니다.
  • LiquidOccupancy — 솔리드 재료의 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재료 솔리드 재

반환

void

코드 샘플

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

테이블 형식을 사용하여 특정 지역의 부드러운 지형을 설정합니다.

매개 변수

region: Region3

기록할 대상 지역. 복셀 그리드에 맞춰야 합니다. 지역이 너무 크면 오류가 발생합니다.

resolution: number

복셀 해상도. 4여야 합니다.

materials: Array

3D 배열은 타겟 지역의 크기와 일치해야 합니다. 크기는 벡셀로 나타납니다.

occupancy: Array

3D 복셀 점유 가능성 배열(0~1 사이의 숫자). 차원은 대상 지역의 크기와 일치해야 합니다.


반환

void

코드 샘플

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

이벤트