Terrain

Hiển Thị Bản Đã Lỗi Thời

*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.

Không Thể Tạo

Địa hình cho phép bạn tạo các môi trường có thể biến đổi năng động với ít hoặc không có độ trễ.Hiện tại nó dựa trên một lưới 4×4×4 của các tế bào, mỗi tế bào có một số từ 0 đến 1 đại diện cho việc geometry chiếm bao nhiêu tế bào, và chất liệu của tế bào.Tỷ lệ chiếm sử dụng xác định cách tế bào sẽ biến dạng cùng với các tế bào xung quanh, và kết quả là sự ảo giác không có hạn chế lưới.

Để biết thêm thông tin, xem Địa hình.

Tóm Tắt

Thuộc Tính

  • Không Thể Viết Kịch Bản
    Đọc Song Song

    Bật hoặc tắt trang trí địa hình.

  • Không Thể Viết Kịch Bản
    Đọc Song Song

    Xác định chiều dài của cỏ hoạt hình.

  • MaterialColors:BinaryString
    Không Thể Viết Kịch Bản
    Đọc Song Song

    MaterialColors đại diện cho trình biên tập cho tính năng Màu vật liệu, và không thể được chỉnh sửa bởi các tập lệnh .

    Để lấy màu của một vật liệu, sử dụng: Terrain:GetMaterialColor() Để đặt màu của một vật liệu, sử dụng: Terrain:SetMaterialColor()

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Hiển thị ranh giới của khu vực có thể chỉnh sửa lớn nhất có thể.

  • Đọc Song Song

    Màu nhuộm của nước địa hình.

  • Đọc Song Song

    Kiểm soát mức độ mờ nước phản chiếu của địa hình.

  • Đọc Song Song

    Sự minh bạch của nước địa hình.

  • Đọc Song Song

    Đặt độ cao tối đa của làn sóng nước địa hình bằng đinh tán.

  • Đọc Song Song

    Đặt số lần mà làn sóng nước địa hình sẽ di chuyển lên và xuống mỗi phút.

Thuộc Tính kế thừa từ BasePart
  • Đọc Song Song

    Xác định xem một phần có bất di chuyển bởi vật lý hay không.

  • Không Sao Chép
    Đọc Song Song

    Tốc độ góc của lắp ráp phần.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Trung tâm của khối lượng của lắp ráp phần trong không gian thế giới.

  • Không Sao Chép
    Đọc Song Song

    Tốc độ song song của lắp ráp phần.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Tổng khối lượng lắp ráp của phần.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Một tham chiếu đến phần gốc của lắp ráp.

  • Đọc Song Song
  • Xác định loại bề mặt cho mặt sau của một phần (+hướng Z).

  • Xác định loại bề mặt cho mặt dưới của một phần (-Y hướng).

  • Không Sao Chép
    Đọc Song Song

    Xác định màu của một phần.

  • Đọc Song Song

    Xác định vị trí và hướng của BasePart trong thế giới.

  • Đọc Song Song

    Xác định xem một phần có thể va chạm với các phần khác hay không.

  • Đọc Song Song

    Xác định xem phần có được xem xét trong các hoạt động truy vấn không gian không.

  • Đọc Song Song

    Xác định xem sự kiện TouchedTouchEnded có bắt lửa trên phần hay không.

  • Đọc Song Song

    Xác định xem một phần có phải phát ra bóng hay không.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Mô tả vị trí thế giới mà trung tâm khối lượng của một phần nằm.

  • Không Sao Chép
    Đọc Song Song

    Mô tả tên của nhóm va chạm của một phần.

  • Không Sao Chép
    Đọc Song Song

    Xác định màu của một phần.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Chỉ ra các tính chất vật lý hiện tại của phần.

  • Xác định một số tính chất vật lý của một phần.

  • Đọc Song Song

    Dùng để bật hoặc tắt lực khí động trên các bộ phận và lắp ráp.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    The CFrame của các phạm vi vật lý của BasePart .

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Kích thước vật lý thực sự của BasePart theo quan điểm của động cơ vật lý.

  • Xác định loại bề mặt cho mặt trước của một phần (-Z hướng).

  • Xác định loại bề mặt cho mặt trái của một phần (-X hướng).

  • Ẩn
    Không Sao Chép
    Đọc Song Song

    Xác định một hệ số cho BasePart.Transparency mà chỉ có thể nhìn thấy bởi khách hàng địa phương.

  • Đọc Song Song

    Xác định xem một phần có thể được chọn trong Studio hay không.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Mô tả khối lượng của phần, sản phẩm của độ dày và khối lượng của nó.

  • Đọc Song Song

    Xác định xem phần có đóng góp vào tổng khối lượng hoặc lượng lưu lưu của cơ thâncứng hay không.

  • Đọc Song Song

    Xác định kết cấu và tính chất vật lý mặc định của một phần.

  • Không Sao Chép
    Đọc Song Song

    Tên của MaterialVariant .

  • Ẩn
    Không Sao Chép
    Đọc Song Song

    Mô tả việc xoay của phần trong thế giới.

  • Đọc Song Song

    Xác định offset của trục của phần từ CFrame của nó.

  • Ẩn
    Không Sao Chép
    Đọc Song Song

    Mô tả vị trí của phần trong thế giới.

  • Ẩn
    Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Thời gian kể từ lần cập nhật vật lý cuối cùng.

  • Đọc Song Song

    Xác định bao nhiêu một phần phản ánh hộp trời.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Mô tả thay đổi nhỏ nhất về kích thước có thể cho phép bởi phương pháp Thay đổi kích thước.

  • Chỉ Đọc
    Không Sao Chép
    Đọc Song Song

    Mô tả các khuôn mặt mà một phần có thể được thay đổi kích cỡ.

  • Xác định loại bề mặt cho mặt phải của một phần (+X hướng).

  • Đọc Song Song

    Quy tắc chính trong việc xác định phần gốc của một tập hợp.

  • Không Sao Chép
    Đọc Song Song

    Sự xoay của phần theo độ cho ba trục.

  • Không Sao Chép
    Đọc Song Song

    Xác định kích thước của một phần (chiều dài, chiều rộng, chiều cao).

  • Xác định loại bề mặt cho mặt trên của một phần (+ hướng Y).

  • Đọc Song Song

    Xác định bao nhiêu một phần có thể được nhìn thấy thông qua (ngược lại với độ mờ phần).

Thuộc Tính kế thừa từ PVInstance
  • Không Sao Chép
    Không Thể Viết Kịch Bản
    Đọc Song Song
  • Không Sao Chép
    Không Thể Viết Kịch Bản
    Đọc Song Song

Phương Pháp

Phương Pháp kế thừa từ BasePartPhương Pháp kế thừa từ PVInstance

Sự Kiện

Sự Kiện kế thừa từ BasePart

Thuộc Tính

Decoration

Không Thể Viết Kịch Bản
Đọc Song Song

Hiện tại bật hoặc tắt cỏ hoạt hình trên vật liệu địa hình Cỏ , mặc dù các thay đổi trong tương lai của thuộc tính này có thể kiểm soát các tính năng trang trí bổ sung.

GrassLength

Không Thể Viết Kịch Bản
Đọc Song Song

Xác định chiều dài của cỏ hoạt hình trên vật liệu địa hình Cỏ , cho rằng Decoration được bật. Các giá trị hợp lệ nằm giữa 0.1 và 1.

MaterialColors

BinaryString
Không Thể Viết Kịch Bản
Đọc Song Song

MaterialColors đại diện cho trình biên tập cho tính năng Màu vật liệu, và không thể được chỉnh sửa bởi các tập lệnh .

Để lấy màu của một vật liệu, sử dụng: Terrain:GetMaterialColor()

Để đặt màu của một vật liệu, sử dụng: Terrain:SetMaterialColor()

MaxExtents

Chỉ Đọc
Không Sao Chép
Đọc Song Song

Hiển thị ranh giới của khu vực có thể chỉnh sửa lớn nhất có thể.

WaterColor

Đọc Song Song

Màu nhuộm của nước địa hình.

WaterReflectance

Đọc Song Song

Kiểm soát mức độ mờ nước phản chiếu của địa hình.

WaterTransparency

Đọc Song Song

Sự minh bạch của nước địa hình.

WaterWaveSize

Đọc Song Song

Đặt độ cao tối đa của làn sóng nước địa hình bằng đinh tán. Hiện tại bị giới hạn giữa 0 và 1.

WaterWaveSpeed

Đọc Song Song

Đặt số lần mà làn sóng nước địa hình sẽ di chuyển lên và xuống mỗi phút. Hiện tại bị giới hạn giữa 0 và 100.

Phương Pháp

CellCenterToWorld

Trả vị trí thế giới của trung tâm của tế bào địa hình (x, y, z).

Tham Số

Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""

Lợi Nhuận

CellCornerToWorld

Trả vị trí của góc trái thấp hơn về phía trước của tế bào lưới (x, y, z).

Tham Số

Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""
Giá Trị Mặc Định: ""

Lợi Nhuận

Clear

()

Xóa địa hình.


Lợi Nhuận

()

CopyRegion

Lưu một khối địa hình thành một đối tượng TerrainRegion để có thể tải lại sau.Lưu ý: TerrainRegion dữ liệu không sao lưu giữa máy chủ và khách hàng.

Tham Số

region: Region3int16
Giá Trị Mặc Định: ""

Lợi Nhuận

Mẫu mã

The following code will copy the whole Terrain and clear it. After 5 seconds it will paste the terrain back.

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

Trả về số lượng tế bào không trống trong Địa hình.


Lợi Nhuận

FillBall

()

Lấp đầy một quả bóng địa hình mịn trong không gian đã cho.

Tham Số

center: Vector3

Vị trí của trung tâm của quả bóng địa hình.

Giá Trị Mặc Định: ""
radius: number

Bán kính trong studs của quả bóng địa hình.

Giá Trị Mặc Định: ""
material: Enum.Material

The Enum.Material của quả bóng địa hình.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

Terrain:FillBall() creates a ball of terrain given a center position, ball radius, and terrain materials.

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

()

Lấp đầy một khối địa hình mịn với vị trí, tốc độ xoay, kích thước và chất liệu đã cho.

Tham Số

cframe: CFrame

Vị trí và hướng của khối địa hình.

Giá Trị Mặc Định: ""
size: Vector3

Kích thước bằng đinh tán của khối hình vuông - cả chiều cao và chiều rộng.

Giá Trị Mặc Định: ""
material: Enum.Material

Cục Enum.Material của khối địa hình.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

FillCylinder

()

Lấp đầy một xi lanh của địa hình mịn trong một không gian nhất định. Không gian được xác định bằng cách sử dụng một CFrame, chiều cao và bán kính.


local Workspace = game:GetService("Workspace")
Workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)

Tham Số

cframe: CFrame

Vị trí và hướng của xi lanh địa hình.

Giá Trị Mặc Định: ""
height: number

Chiều cao bằng đinh tán của xi lanh địa hình.

Giá Trị Mặc Định: ""
radius: number

Bán kính trong đinh tán của xi lanh địa hình.

Giá Trị Mặc Định: ""
material: Enum.Material

The Enum.Material của terrain cylinder.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

FillRegion

()

Lấp đầy một không gian Region3 với địa hình mịn.

Tham Số

region: Region3
Giá Trị Mặc Định: ""
resolution: number
Giá Trị Mặc Định: ""
material: Enum.Material
Giá Trị Mặc Định: ""

Lợi Nhuận

()

FillWedge

()

lấp đầy một khối có hình dạng góc cạnh có kích thước với khoảng và kích thước của khu vực và kích thước được đưa ra.Hướng của khối góc giống như một tương đương WedgePart .

Tham Số

cframe: CFrame

Vị trí và hướng của cạnh để lấp đầy.

Giá Trị Mặc Định: ""
size: Vector3

Kích cỡ của đòn bẩy để lấp đầy.

Giá Trị Mặc Định: ""
material: Enum.Material

Vật liệu mà khối góc sẽ được lấp đầy.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

GetMaterialColor

Ghi Song Song

Trả về màu vật liệu địa hình hiện tại cho vật liệu địa hình được chỉ định.

Tham Số

material: Enum.Material
Giá Trị Mặc Định: ""

Lợi Nhuận

PasteRegion

()

Áp dụng một khối địa hình cho đối tượng Địa hình. Lưu ý: TerrainRegion dữ liệu không sao lưu giữa máy chủ và khách hàng.

Tham Số

Giá Trị Mặc Định: ""
corner: Vector3int16
Giá Trị Mặc Định: ""
pasteEmptyCells: boolean
Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

Creates some terrain, copies it, then pastes it using the following API:

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

Ghi Song Song

Trả về một khu vực dữ liệu voxel địa hình theo dạng bảng dựa trên tên kênh.

Tham Số

region: Region3

Khu vực mục tiêu để đọc. Phải được căn chỉnh với lưới voxel. Sẽ xảy ra lỗi nếu khu vực quá lớn; giới hạn hiện tại là 4194304 voxels³.

Giá Trị Mặc Định: ""
resolution: number

Độ phân giải voxel. Phải là 4.

Giá Trị Mặc Định: ""
channelIds: Array

Hệ thống các ID kênh (chuỗi) cần phải truy cập từ dữ liệu voxel.Mỗi ID kênh đại diện cho một loại dữ liệu được lưu trong voxel.Các ID hỗ trợ hiện tại là {"SolidMaterial", "SolidOccupancy", "LiquidOccupancy"} .

Giá Trị Mặc Định: ""

Lợi Nhuận

Trả về dữ liệu voxel dưới dạng một từ điển dựa trên đầu vào channelIds. Các chìa khóa đại diện cho mỗi ID kênh với giá trị tương ứng như một mảng dữ liệu 3D.

  • SolidMaterial — Vật liệu Enum.Material của voxel.Lưu ý rằng Water không còn được hỗ trợ nữa; thay vào đó, một voxel chứa nước sẽ có giá trị là LiquidOccupancy .
  • SolidOccupancy — Sự chiếm giữ của vật liệu voxel như được định nghĩa trong kênh SolidMaterial. Đây là một giá trị giữa 0 (trống) và 1 (đầy đủ).
  • LiquidOccupancy — Xác định tỷ lệ chiếm của vật liệu Water trong voxel như một giá trị giữa 0 (không có nước) và 1 (đầy nước).Nếu SolidOccupancy là 1 và SolidMaterial không phải là Air, thì điều này sẽ là 0.

Từ điển cũng chứa một chìa khóa Size với giá trị đại diện cho kích thước 3D của mỗi kênh dữ liệu.

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

Ghi Song Song

Trả về một khu vực nhất định của địa hình mịn trong định dạng bảng.

Tham Số

region: Region3

Khu vực mục tiêu để đọc. Phải được căn chỉnh với lưới voxel. Sẽ xảy ra lỗi nếu khu vực quá lớn. Giới hạn hiện tại là 4194304 voxels^3.

Giá Trị Mặc Định: ""
resolution: number

Độ phân giải voxel. Phải là 4.

Giá Trị Mặc Định: ""

Lợi Nhuận

Trả về dữ liệu voxel thô như hai mảng 3D.

  • materials - 3D mảng của Enum.Material từ khu vực mục tiêu. Cũng bao gồm một trường Kích thước, tương đương với kích thước của các mảng lồng nhau.
  • occupancies - 3D mảng các giá trị sử dụng từ khu vực mục tiêu. Cũng bao gồm một trường Kích thước, tương đương với kích thước của các mảng lồng nhau.

Mẫu mã

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

()

Thay thế Vật liệu thay thế mặt địa hình của một cụ thể Enum.Material trong một Region3 với một vật liệu khác.Về cơ bản, đó là một hoạt động tìm và thay thế trên Terrain vật liệu.

Hạn chế

Khi gọi phương thức này, tham số resolution phải chính xác 4.Ngoài ra, Vùng 3 phải được căn chỉnh với lưới vật liệu địa hình, tức làcác thành phần của điểm tối thiểu và tối đa của Vùng 3 phải chia hết cho 4.Sử dụng Region3:ExpandToGrid() để làm cho một khu vực tương thích với chức năng này.

Tham Số

region: Region3

Khu vực mà hoạt động thay thế sẽ xảy ra.

Giá Trị Mặc Định: ""
resolution: number

Độ phân giải mà hoạt động thay thế sẽ diễn địa điểm; tại thời điểm này phải chính xác 4.

Giá Trị Mặc Định: ""
sourceMaterial: Enum.Material

Vật liệu cũ sẽ được thay thế.

Giá Trị Mặc Định: ""
targetMaterial: Enum.Material

Vật liệu mới.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

This code sample demonstrates the usage of Terrain:ReplaceMaterial() by replacing grass near the game origin with asphalt. It does this by constructing a Region3 using two Vector3s.

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

()

Đặt màu vật liệu địa hình hiện tại cho vật liệu địa hình được chỉ định. Vật liệu địa hình sẽ thay đổi màu cơ sở của nó theo màu được chỉ định.

Tham Số

material: Enum.Material
Giá Trị Mặc Định: ""
value: Color3
Giá Trị Mặc Định: ""

Lợi Nhuận

()

WorldToCell

Trả vị trí của các ô lưới chứa điểm vị trí .

Tham Số

position: Vector3
Giá Trị Mặc Định: ""

Lợi Nhuận

WorldToCellPreferEmpty

Trả vị trí của ô lưới chứa vị trí điểm, ưu tiên các ô lưới trống khi vị trí nằm trên cạnh lưới.

Tham Số

position: Vector3
Giá Trị Mặc Định: ""

Lợi Nhuận

WorldToCellPreferSolid

Trả vị trí của ô lưới chứa vị trí điểm, ưu tiên các ô lưới không trống khi vị trí nằm trên cạnh lưới.

Tham Số

position: Vector3
Giá Trị Mặc Định: ""

Lợi Nhuận

WriteVoxelChannels

()

Đặt một khu vực địa hình bằng cách sử dụng một từ điển của dữ liệu kênh voxel.

Tham Số

region: Region3

Khu vực mục tiêu để viết. Phải được căn chỉnh với lưới voxel. Sẽ xảy ra lỗi nếu khu vực quá lớn; giới hạn hiện tại là 4194304 voxels³.

Giá Trị Mặc Định: ""
resolution: number

Độ phân giải voxel. Phải là 4.

Giá Trị Mặc Định: ""
channels: Dictionary

Từ điển dữ liệu voxel tương tự như giá trị trả về của ReadVoxelChannels() .Các khóa đại diện cho mỗi ID kênh với giá trị tương ứng của chúng như một mảng dữ liệu 3D.Từ điển có thể hỗ trợ đầu vào kênh đơn hoặc nhiều.

  • SolidMaterial — Vật liệu Enum.Material của voxel.Lưu ý rằng Water không còn được hỗ trợ nữa; thay vào đó, một voxel chỉ chứa nước nên được nhập là SolidMaterial = Enum.Material.Air, LiquidOccupancy = x , nơi x là một số từ 0 (độc quyền) đến 1 (bao gồm).
  • SolidOccupancy — Sự chiếm chỗ của vật liệu voxel như được định nghĩa trong kênh SolidMaterial. Đây nên là một giá trị giữa 0 (trống) và 1 (đầy đủ).
  • LiquidOccupancy — Xác định tỷ lệ chiếm của vật liệu Water trong voxel như một giá trị giữa 0 (không có nước) và 1 (đầy nước).Nếu SolidOccupancy là 1 và SolidMaterial không phải là Air, thì điều này sẽ là 0.
Giá Trị Mặc Định: ""

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

()

Đặt một khu vực nhất định của địa hình bằng cách sử dụng định dạng bảng.

Tham Số

region: Region3

Khu vực mục tiêu để viết. Phải được căn chỉnh với lưới voxel. Sẽ xảy ra lỗi nếu khu vực quá lớn.

Giá Trị Mặc Định: ""
resolution: number

Độ phân giải voxel. Phải là 4.

Giá Trị Mặc Định: ""
materials: Array

3D mảng của Enum.Material. Chiều phải chính xác phù hợp với kích thước của khu vực mục tiêu trong voxels.

Giá Trị Mặc Định: ""
occupancy: Array

3D mảng của số lượng voxel chiếm (số nằm giữa 0 và 1). Chiều phải chính xác phù hợp với kích thước của khu vực mục tiêu trong voxel.

Giá Trị Mặc Định: ""

Lợi Nhuận

()

Mẫu mã

Example

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)

Many terrain methods throw an error if their given region size is too large. The limit is currently 4194304 voxels^3 for ReadVoxels() and WriteVoxels(), and 67108864 voxels^3 for other methods. For methods that take a cframe + size combination (e.g. FillBlock, FillCylinder etc.), then the region volume is calculated from the AABB of the target area.

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

Sự Kiện