Lớp công cụ
Terrain
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Tóm tắt
Thuộc Tính
MaterialColors:BinaryString |
Phương Pháp
Thành viên kế thừa
106 thành viên kế thừa từ BasePart
4 thành viên kế thừa từ PVInstance
58 thành viên kế thừa từ Instance
6 thành viên kế thừa từ Object
Tài Liệu Tham Khảo API
Thuộc Tính
IsSmooth
MaterialColors
Terrain.MaterialColors:BinaryString
Phương Pháp
AutowedgeCell
AutowedgeCells
CellCenterToWorld
CellCornerToWorld
Clear
Terrain:Clear():()
Lợi Nhuận
()
ConvertToSmooth
CopyRegion
Tham Số
Lợi Nhuận
Mẫu mã
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)FillBall
Tham Số
Lợi Nhuận
()
FillBlock
Tham Số
Lợi Nhuận
()
FillCylinder
Tham Số
Lợi Nhuận
()
FillRegion
Tham Số
Lợi Nhuận
()
FillWedge
Tham Số
Lợi Nhuận
()
GetCell
GetMaterialColor
GetMaterialSlot
Tham Số
Lợi Nhuận
Mẫu mã
Các Khe Vật Liệu Địa Hình
local MaterialService = game:GetService("MaterialService")
local Terrain = workspace.Terrain
-- Các khe từ 2 đến 63 có thể ghi; khe 0 và 1 được dành cho Không khí và Nước
local SLOT_INDEX = 2
local BASE_MATERIAL = Enum.Material.Grass
local VARIANT_NAME = "SwampVariant"
-- Tìm một MaterialVariant hiện có cho vật liệu cơ bản, hoặc tạo một cái mới
-- SetMaterialSlot() mong đợi tên của biến thể, không phải tên hiển thị của Trình quản lý Vật liệu
local variant = MaterialService:FindFirstChild(VARIANT_NAME)
if not variant then
variant = Instance.new("MaterialVariant")
variant.Name = VARIANT_NAME
variant.BaseMaterial = BASE_MATERIAL
variant.Parent = MaterialService
end
-- Cấu hình khe với vật liệu cơ bản, tên MaterialVariant, và một màu sắc
-- Truyền một chuỗi rỗng thay vì tên biến thể để sử dụng diện mạo mặc định của vật liệu cơ bản được tô màu bởi màu đã cho
Terrain:SetMaterialSlot(SLOT_INDEX, BASE_MATERIAL, variant.Name, Color3.fromRGB(50, 60, 30))
local baseMaterial, materialVariant, color = Terrain:GetMaterialSlot(SLOT_INDEX)
print(baseMaterial, materialVariant, color)
-- Ghi một vùng voxel tham chiếu đến khe theo chỉ số, thay vì theo Enum.Material, sử dụng kênh SolidMaterialIndex
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 16, 16)):ExpandToGrid(4)
local size = region.Size / 4
local materialIndices = {}
local occupancies = {}
for x = 1, size.X do
materialIndices[x] = {}
occupancies[x] = {}
for y = 1, size.Y do
materialIndices[x][y] = {}
occupancies[x][y] = {}
for z = 1, size.Z do
materialIndices[x][y][z] = SLOT_INDEX
occupancies[x][y][z] = 1
end
end
end
Terrain:WriteVoxelChannels(region, 4, {
SolidMaterialIndex = materialIndices,
SolidOccupancy = occupancies,
})
-- Xóa khe sẽ khiến các voxel tham chiếu đến nó được hiển thị là không hợp lệ cho đến khi chúng được vẽ lại với một chỉ số khe hợp lệ
Terrain:ResetMaterialSlot(SLOT_INDEX)GetWaterCell
PasteRegion
Tham Số
Lợi Nhuận
()
Mẫu mã
Tạo, Sao chép và Dán Địa hình
local Terrain = workspace.Terrain
-- Tạo một vùng địa hình đơn giản
local initialRegion = Region3.new(Vector3.zero, Vector3.one * 10)
Terrain:FillRegion(initialRegion, 4, Enum.Material.Grass)
-- Sao chép vùng đó
local copyRegion = Region3int16.new(Vector3int16.new(0, 0, 0), Vector3int16.new(10, 10, 10))
local copiedRegion = Terrain:CopyRegion(copyRegion)
-- Định nghĩa nơi để dán vùng này
local newRegionCorner = Vector3int16.new(5, 0, 0)
-- Dán vùng này
Terrain:PasteRegion(copiedRegion, newRegionCorner, true)ReadVoxelChannels
Lợi Nhuận
Mẫu mã
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
Lợi Nhuận
Mẫu mã
Terrain:ReadVoxels()
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 -- Cùng với 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
Terrain:ReplaceMaterial(
):()
Tham Số
Lợi Nhuận
()
Mẫu mã
Terrain:ReplaceMaterial
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)ResetMaterialSlot
Tham Số
Lợi Nhuận
()
Mẫu mã
Các Khe Vật Liệu Địa Hình
local MaterialService = game:GetService("MaterialService")
local Terrain = workspace.Terrain
-- Các khe từ 2 đến 63 có thể ghi; khe 0 và 1 được dành cho Không khí và Nước
local SLOT_INDEX = 2
local BASE_MATERIAL = Enum.Material.Grass
local VARIANT_NAME = "SwampVariant"
-- Tìm một MaterialVariant hiện có cho vật liệu cơ bản, hoặc tạo một cái mới
-- SetMaterialSlot() mong đợi tên của biến thể, không phải tên hiển thị của Trình quản lý Vật liệu
local variant = MaterialService:FindFirstChild(VARIANT_NAME)
if not variant then
variant = Instance.new("MaterialVariant")
variant.Name = VARIANT_NAME
variant.BaseMaterial = BASE_MATERIAL
variant.Parent = MaterialService
end
-- Cấu hình khe với vật liệu cơ bản, tên MaterialVariant, và một màu sắc
-- Truyền một chuỗi rỗng thay vì tên biến thể để sử dụng diện mạo mặc định của vật liệu cơ bản được tô màu bởi màu đã cho
Terrain:SetMaterialSlot(SLOT_INDEX, BASE_MATERIAL, variant.Name, Color3.fromRGB(50, 60, 30))
local baseMaterial, materialVariant, color = Terrain:GetMaterialSlot(SLOT_INDEX)
print(baseMaterial, materialVariant, color)
-- Ghi một vùng voxel tham chiếu đến khe theo chỉ số, thay vì theo Enum.Material, sử dụng kênh SolidMaterialIndex
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 16, 16)):ExpandToGrid(4)
local size = region.Size / 4
local materialIndices = {}
local occupancies = {}
for x = 1, size.X do
materialIndices[x] = {}
occupancies[x] = {}
for y = 1, size.Y do
materialIndices[x][y] = {}
occupancies[x][y] = {}
for z = 1, size.Z do
materialIndices[x][y][z] = SLOT_INDEX
occupancies[x][y][z] = 1
end
end
end
Terrain:WriteVoxelChannels(region, 4, {
SolidMaterialIndex = materialIndices,
SolidOccupancy = occupancies,
})
-- Xóa khe sẽ khiến các voxel tham chiếu đến nó được hiển thị là không hợp lệ cho đến khi chúng được vẽ lại với một chỉ số khe hợp lệ
Terrain:ResetMaterialSlot(SLOT_INDEX)SetCell
SetCells
SetMaterialColor
Tham Số
Lợi Nhuận
()
SetMaterialSlot
Terrain:SetMaterialSlot(
):()
Tham Số
Lợi Nhuận
()
Mẫu mã
Các Khe Vật Liệu Địa Hình
local MaterialService = game:GetService("MaterialService")
local Terrain = workspace.Terrain
-- Các khe từ 2 đến 63 có thể ghi; khe 0 và 1 được dành cho Không khí và Nước
local SLOT_INDEX = 2
local BASE_MATERIAL = Enum.Material.Grass
local VARIANT_NAME = "SwampVariant"
-- Tìm một MaterialVariant hiện có cho vật liệu cơ bản, hoặc tạo một cái mới
-- SetMaterialSlot() mong đợi tên của biến thể, không phải tên hiển thị của Trình quản lý Vật liệu
local variant = MaterialService:FindFirstChild(VARIANT_NAME)
if not variant then
variant = Instance.new("MaterialVariant")
variant.Name = VARIANT_NAME
variant.BaseMaterial = BASE_MATERIAL
variant.Parent = MaterialService
end
-- Cấu hình khe với vật liệu cơ bản, tên MaterialVariant, và một màu sắc
-- Truyền một chuỗi rỗng thay vì tên biến thể để sử dụng diện mạo mặc định của vật liệu cơ bản được tô màu bởi màu đã cho
Terrain:SetMaterialSlot(SLOT_INDEX, BASE_MATERIAL, variant.Name, Color3.fromRGB(50, 60, 30))
local baseMaterial, materialVariant, color = Terrain:GetMaterialSlot(SLOT_INDEX)
print(baseMaterial, materialVariant, color)
-- Ghi một vùng voxel tham chiếu đến khe theo chỉ số, thay vì theo Enum.Material, sử dụng kênh SolidMaterialIndex
local region = Region3.new(Vector3.new(0, 0, 0), Vector3.new(16, 16, 16)):ExpandToGrid(4)
local size = region.Size / 4
local materialIndices = {}
local occupancies = {}
for x = 1, size.X do
materialIndices[x] = {}
occupancies[x] = {}
for y = 1, size.Y do
materialIndices[x][y] = {}
occupancies[x][y] = {}
for z = 1, size.Z do
materialIndices[x][y][z] = SLOT_INDEX
occupancies[x][y][z] = 1
end
end
end
Terrain:WriteVoxelChannels(region, 4, {
SolidMaterialIndex = materialIndices,
SolidOccupancy = occupancies,
})
-- Xóa khe sẽ khiến các voxel tham chiếu đến nó được hiển thị là không hợp lệ cho đến khi chúng được vẽ lại với một chỉ số khe hợp lệ
Terrain:ResetMaterialSlot(SLOT_INDEX)SetWaterCell
WorldToCellPreferEmpty
WorldToCellPreferSolid
WriteVoxelChannels
Tham Số
Lợi Nhuận
()
Mẫu mã
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 -- Chất rắn không thể chứa nước
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
Lợi Nhuận
()
Mẫu mã
Terrain:WriteVoxels()
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)