Terrain
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
การเลี้ยนที่นี่ช่วยให้คุณสร้างสภาพแวดล้อมที่เปลี่ยนแปลงได้อย่างไม่มีปัญหา มันขณะนี้อิงจากกริด 4×4×4 ของเซลล์ซึ่งแต่ละเซลล์มีหมายเลขระหว่าง 0 แล
สำหรับข้อมูลเพิ่มเติม ดู พื้นที่ว่าง
สรุป
คุณสมบัติ
เปิดหรือปิดการตกแต่งภาพประกาย
ระบุความยาวของหญ้าที่เคลื่อนไหว
MaterialColors เป็นตัวแทนของเว็บไซต์สำหรับคุณสมบัติสีวัสดุ, และ ไม่สามารถแก้ไขโดยสคริปต์ได้ เพื่อรับสีของวัสดุให้ใช้: Terrain:GetMaterialColor() เพื่อตั้งสีของวัสดุให้ใช้: Terrain:SetMaterialColor()
แสดงขอบเขตของภูมิภาคที่ใหญ่ที่สุดที่สามารถแก้ไขได้
สีของน้ําภาค
ควบคุมความโปร่งใสของการสะท้อนน้ำของพื้นที่
ความโปร่งใสของน้ำภาคพื้นดิน
ตั้งค่าความสูงสูงสุดของคลื่นน้ำในพื้นที่ในเมตร
ตั้งค่าจำนวนครั้งที่น้ำของพื้นที่จะเคลื่อนไหวขึ้นและลงในแต่ละนาที
กำหนดว่าชิ้นส่วนนั้นเป็นของเหนียวตามธรรมชาติหรือไม่
ความเร็วมุมของการประกอบของชิ้นส่วน
ศูนย์กลางของพลังงานในการประกอบของชิ้นส่วนในอวกาศ
ความเร็วที่เฉียบขาดของการประกอบของชิ้นส่วน
พลังงานทั้งหมดของการประกอบของชิ้นส่วน
อ้างอิงถึงส่วนรากของการประกอบ
กำหนดประเภทของพื้นผิวสำหรับหน้าด้านหลังของชิ้นส่วน (+Z ทิศทาง)
กำหนดประเภทของพื้นผิวสำหรับด้านล่างของชิ้นส่วน (-Y ทิศทาง)
กำหนดสีของชิ้นส่วน
กำหนดตำแหน่งและทิศทางของ BasePart ในโลก
กำหนดว่าชิ้นส่วนอาจชนกับชิ้นส่วนอื่น
กำหนดว่าจะใช้การสอบถามข้อมูลทางอาณาเขตในขั้นตอนการประมวลผลหรือไม่
กำหนดว่า Touched และ TouchEnded เหตุการณ์จะเกิดขึ้นบนชิ้นส่วน
กำหนดว่าจะมีเงาหรือไม่มีเงา
อธิบายตำแหน่งกลางของมวลของชิ้นส่วน
อธิบายชื่อกลุ่มความสามัคคีของชิ้นส่วน
กำหนดสีของชิ้นส่วน
ระบุลักษณะทางกายภาพปัจจุบันของชิ้นส่วน
กำหนดสมบัติภาพทางกายภาพหลายอย่างของชิ้นส่วน
ใช้เพื่อเปิดใช้งานหรือปิดการใช้งานแรงโน้มถ่วงบนชิ้นส่วนและการประกอบ
ขนาดทางกายภาพจริงของ BasePart ตามที่เครื่องจักรฟิสิกส์มองว่า
กำหนดประเภทของพื้นผิวสำหรับหน้าผากของชิ้นส่วน (-Z ทิศทาง)
กำหนดประเภทของพื้นผิวสำหรับหน้าซ้ายของชิ้นส่วน (-X ทิศทาง)
กำหนดตัวคูณสำหรับ BasePart.Transparency ที่มองเห็นได้เฉพาะลูกค้าท้องถิ่นเท่านั้น
กำหนดว่าจุดส่วนหนึ่งสามารถเลือกได้ใน Studio
อธิบายปริมาณของชิ้นส่วน ผลิตภัณฑ์ของความหนาแน่นและปริมาณ
กำหนดว่าส่วนหนึ่งมีส่วนร่วมกับพลังงานทั้งหมดหรือความต้องการในตัวเองของร่างกายที่แข็งแกร่ง
กำหนดคุณสมบัติและคุณสมบัติทางกายภาพปกติของชิ้นส่วน
ชื่อของ MaterialVariant
อธิบายการหมุนของชิ้นส่วนในโลก
ระบุค่าเฉลี่ยของส่วนหมุนจาก Datatype.CFrame ของมัน
อธิบายตำแหน่งของชิ้นส่วนในโลก
เวลาตั้งแต่อัปเดตฟิสิกส์ครั้งล่าสุด
กำหนดว่าส่วนใดสะท้อนสกายบ็อกซ์ได้มาก
อธิบายการเปลี่ยนแปลงขนาดเล็กสุดที่อนุญาตโดยวิธีขยาย
อธิบายใบหน้าที่ส่วนหนึ่งอาจเปลี่ยนขนาด
กำหนดประเภทของพื้นผิวสำหรับด้านขวาของชิ้นส่วน (+X ทิศทาง)
กฎหลักในการกำหนดราก้อนของการประกอบการ
การหมุนของส่วนในองศาสำหรับสามแกน
กำหนดความสูงของชิ้นส่วน (ความสูง) ความกว้าง (ความกว้าง) และความสูง (ความสูง)
กำหนดประเภทของพื้นผิวสำหรับหน้าด้านบนของชิ้นส่วน (+Y ทิศทาง)
กำหนดว่าส่วนหนึ่งสามารถมองเห็นได้มากเท่าไหร่ (คือสิ่งที่ผิดพลาดของความโปร่งใสของส่วน)
วิธีการ
กลับตำแหน่งโลกของศูนย์เซลล์ภาคดิน (x, y, z)
กลับตำแหน่งของมุมซ้ายล่างของเซลล์กริด (x, y, z)
ล้างสภาพที่อยู่บนพื้น.
เก็บชิ้นส่วนของพื้นที่ในวัตถุ TerrainRegion เพื่อให้สามารถโหลดกลับมาในภายหลังได้ หมายเหตุ: ข้อมูล TerrainRegion ไม่ได้รีพลิกระหว่างเซิร์ฟเวอร์และคลายเคลม
กลับจำนวนเซลล์ที่ไม่เปล่าในพื้นที่
กรอกลูกบอลของพื้นที่ละเอียดในพื้นที่ที่กำหนด
กรอกบล็อกของพื้นที่ลื่นด้วยตำแหน่ง การหมุน ขนาด และวัสดุที่กำหนด
กรอกทรงกระบอกของพื้นที่ละเอียดในพื้นที่ที่กำหนด
กรอกพื้นที่ Region3 ด้วยเนื้อหาเรียบ.
กรอกรูปร่างทรงกระบอกของพื้นที่ด้วย Enum.Material และ CFrame และขนาดของพื้นที่
กลับสีของวัสดุเฉพาะสำหรับพื้นที่
ใช้ส่วนหนึ่งของพื้นที่ในวัตถุพื้นที่ หมายเหตุ: ข้อมูล TerrainRegion ไม่ได้รีพลีตระหว่างเซิร์ฟเวอร์และคลายเคลมได้
กลับรูปแบบข้อมูล voxel ภาคภูมิในตารางโดยใช้ชื่อช่อง
กลับรูปแบบภาพถนนที่เรียบในตาราง
- ReplaceMaterial(region : Region3,resolution : number,sourceMaterial : Enum.Material,targetMaterial : Enum.Material):void
แทนที่พื้นดินของวัสดุในภาภาพภายในภูมิภาคด้วยวัสดุอื่น
ตั้งค่าสีของวัสดุภาพประกายเกียวสำหรับวัสดุภาพประกายเกียวที่กำหนด
กลับตำแหน่งเซลล์กริดที่มีตำแหน่ง ตําแหน่ง
กลับตำแหน่งเซลล์กริดที่มีตำแหน่งจุด โดยเลือกเซลล์กริดที่ว่างเมื่อตำแหน่งอยู่บนขอบเซลล์กริด
กลับตำแหน่งเซลล์กริดที่มีตำแหน่งจุด โดยเฉพาะเซลล์กริดที่ไม่มีเนื้อหาเมื่อตำแหน่งอยู่บนขอบเซลล์กริด
ตั้งภาคภูมิใช้พจนานุกรมของข้อมูลช่องว่ายน้ำเพื่อกำหนดภาคภูมิ
ตั้งค่าภาคส่วนหนึ่งของพื้นที่ละเอียดโดยใช้รูปแบบตาราง
ใช้แรงผลักแบบมุมเพื่อประกอบ
ใช้แรงผลักในการประยุกต์ใช้งานต่อวงจรที่ center of mass
ใช้แรงผลักไปยังการประกอบในตำแหน่งที่กำหนด
กลับว่าชิ้นส่วนสามารถชนกันได้หรือไม่
ตรวจสอบว่าคุณสามารถตั้งค่าเครือข่ายของบางส่วนได้หรือไม่
กลับตารางของชิ้นส่วนที่เชื่อมต่อกับวัตถุโดยประเภทของข้อต่อที่แข็งแกร่ง
กลับส่วนของร่วมหรือข้อจํากัดที่เชื่อมต่อกับส่วนนี้
กลับค่าของสมบัติสินค้า Mass
กลับผู้เล่นปัจจุบันที่เป็นเจ้าของเครือข่ายของส่วนนี้ หรือ zero ในกรณีของเซิร์ฟเวอร์
กลับ true หากเครื่องยนต์เกมตัดสินผู้สมัครเครือข่ายสำหรับส่วนนี้โดยอัตโนมัติ
กลับส่วนปูมของการรวบรวมของชิ้นส่วน
กลับตารางของ all BasePart.CanCollide ชิ้นส่วนที่เป็นส่วนหนึ่งกับส่วนนี้
กลับค่าความเร็วเส้นที่เป็นลินเนียมของการประกอบของชิ้นส่วนที่ให้ไว้ในตำแหน่งนี้เมื่อเปรียบเทียบกับตำแหน่งนี้
กลับ true หากวัตถุเชื่อมต่อกับส่วนที่จะรองรับมันในที่ (เช่น Anchored ส่วน) ยกเว้นกลับ false หากเป็นกรณีอื่น
เปลี่ยนขนาดของวัตถุเหมือนการใช้เครื่องมือขยายขนาดใน Studio
ตั้งผู้เล่นที่ให้เป็นเจ้าของเครือข่ายสำหรับส่วนนี้และส่วนที่เชื่อมต่ออื่น ๆ
ให้เครื่องมือเกมตัดสินใจได้อย่างไดนามิกว่าใครจะดูแลฟิสิกส์ของชิ้นส่วน (หนึ่งในลูกค้าหรือเซิร์ฟเวอร์)
- IntersectAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
สร้าง IntersectOperation ใหม่จากเหลี่ยมของผลิตภัณฑ์และอื่น ๆ ในค่าย่อที่ให้
- SubtractAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
สร้าง UnionOperation ใหม่จากส่วน โดยลบภูมิที่เป็นรูปสี่เหลี่ยมจากส่วนที่อยู่ในแผนที่ที่ให้
- UnionAsync(parts : Instances,collisionfidelity : Enum.CollisionFidelity,renderFidelity : Enum.RenderFidelity):Instance
สร้าง UnionOperation ใหม่จากส่วน รวมถึงภาพที่เป็นรูปร่างที่ครอบครองพื้นที่ส่วนในแผงที่ให้
รับ pivot ของ Class.PVInstance
แปลง PVInstance พร้อมกับบรรพบุรุษทั้งหมดของมัน PVInstances เพื่อให้ pivot ตอนนี้อยู่ที่ CFrame ที่กำหนด
อีเวนต์
อีเวนต์รับทอดมาจากBasePartเกิดขึ้นเมื่อชิ้นส่วนหยุดแตะอีกชิ้นส่วนในผลมาจากการเคลื่อนที่ทางกายภาพ
เกิดขึ้นเมื่อชิ้นส่วนสัมผัสกับอีกชิ้นส่วนในผลมาจากการเคลื่อนที่ทางกายภาพ
คุณสมบัติ
Decoration
ปัจจุบันเปิดหรือปิดวงล้อแห่งหญ้าบนวัสดุพื้นดิน หญ้า โดยเฉพาะอย่างยิ่งการเปลี่ยนแปลงในอนาคตของสมบัตินี้อาจควบคุมคุณสมบัติที่ตกแต่งเพิ่มเติม
GrassLength
ระบุความยาวของหญ้าที่เคลื่อนไหวในวัสดุพื้นดิน หญ้า โดยเดาว่า Decoration เปิดใช้งานแล้ว ส่วนค่าที่ถูกต้องคือระหว่าง 0.1 และ 1
MaterialColors
MaterialColors เป็นตัวแทนของเว็บไซต์สำหรับคุณสมบัติสีวัสดุ, และ ไม่สามารถแก้ไขโดยสคริปต์ได้ เพื่อรับสีของวัสดุให้ใช้: Terrain:GetMaterialColor()
เพื่อตั้งสีวัสดุให้ใช้: Terrain:SetMaterialColor()
WaterWaveSize
ตั้งค่าความสูงสูงสุดของคลื่นน้ำในพื้นที่ให้ในสตั๊ด นี่ได้รับการจำกัดให้อยู่ระหว่าง 0 และ 1 ในขณะนี้
WaterWaveSpeed
ตั้งค่าจำนวนครั้งที่น้ำขึ้นและลงในแต่ละนาที นี้จำกัดอยู่ในขณะนี้ระหว่าง 0 และ 100
วิธีการ
CellCenterToWorld
กลับตำแหน่งโลกของศูนย์เซลล์ภาคดิน (x, y, z)
พารามิเตอร์
ส่งค่ากลับ
CellCornerToWorld
กลับตำแหน่งของมุมซ้ายล่างของเซลล์กริด (x, y, z)
พารามิเตอร์
ส่งค่ากลับ
Clear
ล้างสภาพที่อยู่บนพื้น.
ส่งค่ากลับ
CopyRegion
เก็บชิ้นส่วนของพื้นที่ในวัตถุ TerrainRegion เพื่อให้สามารถโหลดกลับมาในภายหลังได้ หมายเหตุ: ข้อมูล TerrainRegion ไม่ได้รีพลิกระหว่างเซิร์ฟเวอร์และคลายเคลม
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
local terrainRegion = workspace.Terrain:CopyRegion(workspace.Terrain.MaxExtents)
workspace.Terrain:Clear()
task.wait(5)
workspace.Terrain:PasteRegion(terrainRegion, workspace.Terrain.MaxExtents.Min, true)
FillBall
กรอกลูกบอลของพื้นที่ละเอียดในพื้นที่ที่กำหนด
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
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
กรอกบล็อกของพื้นที่ลื่นด้วยตำแหน่ง การหมุน ขนาด และวัสดุที่กำหนด
พารามิเตอร์
การจัดตำแหน่งและการจัดตำแหน่งของบล็อกเทียม
ขนาดใน studs ของบล็อกตรง - ความสูงและความกว้าง
บล็อกพื้นดิน Enum.Material
ส่งค่ากลับ
FillCylinder
กรอกทรงกระบอกของพื้นที่ละเอียดในพื้นที่ที่กำหนด พื้นที่ถูกกำหนดโดย CFrame ความสูง และรัศมี
การใช้
workspace.Terrain:FillCylinder(CFrame.new(0, 50, 0), 5, 30, Enum.Material.Asphalt)
พารามิเตอร์
CFrame (ตําแหน่งและการจัดเรียง) ของทรงกระบอกดิน
ความสูงใน studs ของทรงกระบอกดิน
รัศมีใน studs ของทรงกระบอกดิน
The Enum.Material ของทรงกระบอกพื้นดิน
ส่งค่ากลับ
FillWedge
FillWedge() กรอกรูปร่างเป็นทรงกระบอกของ Terrain ด้วย Enum.Material ที่ให้และพื้นที่ 0> Datatype.CFrame0> และขนาด การจัดเรียงของกระบอ
พารามิเตอร์
ตำแหน่งและการจัดตำแหน่งของเหลี่ยมผืนที่จะเติม
ขนาดของที่พรรคเพื่อการกรอก
วัสดุที่ใช้ในการเติมเข็ม
ส่งค่ากลับ
GetMaterialColor
กลับสีของวัสดุเฉพาะสำหรับพื้นที่
พารามิเตอร์
ส่งค่ากลับ
PasteRegion
ใช้ส่วนหนึ่งของพื้นที่ในวัตถุพื้นที่ หมายเหตุ: ข้อมูล TerrainRegion ไม่ได้รีพลีตระหว่างเซิร์ฟเวอร์และคลายเคลมได้
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
--[[
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
กลับรูปแบบข้อมูล voxel ภาคภูมิในตารางโดยใช้ชื่อช่อง
พารามิเตอร์
ภาคเป้าหมายที่อ่านจากภาคเป้าหมาย ต้องอยู่ในเครือข่าย voxel เท่านั้น จะมีข้อผิดพลาดถ้าภาคเป็นส่วนใหญ่มากเกินไป ขีดจำกัดปัจจุบันคือ 4194304 วัฒซ์
ความละเอียดของโวกเซล ต้องเป็น 4
รายการรหัสช่องที่ต้องการเข้าถึงจากข้อมูล voxel (สตริง) ที่ต้องการเข้าถึง รหัสช่องแต่ละรายการจะรวมถึงประเภทของข้อมูลที่เก็บไว้ใน voxel ปัจจุบันรหัสสนับสนุนที่สนับสนุน
ส่งค่ากลับ
กลับข้อมูล voxel เป็นพจนานุกรมตามการป้อนข้อมูล channelIds ในขณะนี้ กุญแจแสดงแต่ละรหัสช่องด้วยค่าของตัวแทน 3D เป็นรายการ
- SolidMaterial — วัสดุ Enum.Material ของ voxel โปรดทราบว่า Water ไม่สนับสนุนอีกต่อไป; แทนที่นั้น วัสดุที่มีน้ําจะมีมูลค่า 0> LiquidOccupancy0>
- SolidOccupancy — ความเป็นเจ้าของวัตถุของวัสดุในช่อง SolidMaterial นี้คือค่าระหว่าง 0 (ว่างเปล่า) และ 1 (เต็ม)
- LiquidOccupancy — ระบุความเป็นเจ้าของวัสดุ Water ใน voxel ในระหว่าง 0 (ไม่มีน้ํา) และ 1 (เต็ม voxel) หาก
พจนารูปและคีย์ Size อื่น ๆ ที่มีค่าแทนขนาดรายการช่องของแต่ละข้อมูลช่อง
ตัวอย่างโค้ด
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
กลับรูปแบบภาพถนนที่เรียบในตาราง
พารามิเตอร์
ภาพเขตเป้าหมายที่อ่านจากภาพเขตเป้าหมาย ต้องอยู่ในเครือข่าย voxel เท่านั้น จะโยนข้อผิดพลาดหากภาพเขตเป้าหมายใหญ่เกินไป ขีดจำกัดปัจจุบันคือ 4194304 โวกเซล^3
ความละเอียดของโวกเซล ต้องเป็น 4
ส่งค่ากลับ
กลับข้อมูลโวกซ์เทลดิ้งสดในรูปแบบสองแถว 3D
- materials - รายการ 3D ของ Enum.Material จากพื้นที่เป้าหมาย นอกจากนี้ยังมีสาขา Field ซึ่งเท่ากับขนาดของรายการที่เรียงซ้อน
- occupancies - 3D รายการอาคารจากพื้นที่เป้าหมาย นอกจากนี้ยังมีสาขาขนาดเท่าขนาดของรายการอาคารที่เรียงซ้อน
ตัวอย่างโค้ด
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 แทนที่พื้นดินของ Class.Terrain ภายใน Datatype.Region3 ด้วยวัสดุอื่น ในความเป็นจริง มันเป็นการหาและแทนที่การดำเนินงานบนวัสดุ Region3 เหล่านี้
ข้อจํากัด
เมื่อเรียกวิธีนี้ต้องมี resolution พารามิเตอร์ที่ถูกต้องคือ 4 นอกจากนี้ ภาคภูมิใต้ ต้องอยู่ในเค้าโครงของวัสดุภูมิใต้ คือ ส่วนประกอบของจุดสูง
พารามิเตอร์
เกิดขึ้น
ความละเอียดที่เครื่องสำอางจะดำเนินการแทนที่ในขณะนี้ต้องเป็นตัวเลขที่แน่นอน 4
วัสดุเก่าที่จะถูกแทนที่
วัสดุใหม่
ส่งค่ากลับ
ตัวอย่างโค้ด
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
ตั้งค่าสีของวัสดุภาพประกอบสภาพแวดล้อมปัจจุบันสำหรับวัสดุภาพประกอบที่กำหนด วัสดุภาพประกอบจะเปลี่ยนสีเบื้องหลังสีของวัสดุภาพประกอบไปยังสีของวัสดุภาพประกอบที่กำหนด
พารามิเตอร์
ส่งค่ากลับ
WorldToCell
กลับตำแหน่งเซลล์กริดที่มีตำแหน่ง ตําแหน่ง
พารามิเตอร์
ส่งค่ากลับ
WorldToCellPreferEmpty
กลับตำแหน่งเซลล์กริดที่มีตำแหน่งจุด โดยเลือกเซลล์กริดที่ว่างเมื่อตำแหน่งอยู่บนขอบเซลล์กริด
พารามิเตอร์
ส่งค่ากลับ
WorldToCellPreferSolid
กลับตำแหน่งเซลล์กริดที่มีตำแหน่งจุด โดยเฉพาะเซลล์กริดที่ไม่มีเนื้อหาเมื่อตำแหน่งอยู่บนขอบเซลล์กริด
พารามิเตอร์
ส่งค่ากลับ
WriteVoxelChannels
ตั้งภาคภูมิใช้พจนานุกรมของข้อมูลช่องว่ายน้ำเพื่อกำหนดภาคภูมิ
พารามิเตอร์
ภาพเขตเป้าหมายที่จะเขียน. ต้องอยู่ในเครือข่าย voxel เท่านั้น จะโยนข้อผิดพลาดหากภาพเป็นสีมากเกินไป; ขีดจำกัดปัจจุบันคือ 4194304 วัฒล์.
ความละเอียดของโวกเซล ต้องเป็น 4
พจนานุกรมข้อมูล voxel คล้ายกับค่ากลับของ ReadVoxelChannels() กุญแจแสดงตัวตนของแต่ละช่องที่มีค่าของพวกเขาเป็นรายการของข้อมูล 3D เป็นรายการ ไดรับนี้สามารถสนั
- SolidMaterial — วัสดุ Enum.Material ของ voxel หมายเหตุว่า Water ไม่สนับสนุนอีกต่อไป; แทนที่, วัสดุที่มีน
- SolidOccupancy — ความเป็นเจ้าของวัตถุของวัสดุในช่อง SolidMaterial นี้ควรเป็นค่าระหว่าง 0 (ว่างเปล่า) และ 1 (เต็ม)
- LiquidOccupancy — ระบุความเป็นเจ้าของวัสดุ Water ใน voxel ในระหว่าง 0 (ไม่มีน้ํา) และ 1 (เต็ม voxel) หาก
ส่งค่ากลับ
ตัวอย่างโค้ด
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
ตั้งค่าภาคส่วนหนึ่งของพื้นที่ละเอียดโดยใช้รูปแบบตาราง
พารามิเตอร์
ภาพเขตเป้าหมายที่จะเขียน. ต้องอยู่ในเครือข่าย voxel เท่านั้น จะโยนข้อผิดพลาดหากภาพเขตเป็นสีมากเกินไป
ความละเอียดของโวกเซล ต้องเป็น 4
3D รายการของ Menu.Material มิติต้องตรงกับขนาดของภาคเป้าหมายใน voxels
3D รายการอาคาร (จํานวนระหว่าง 0 และ 1) มิติต้องตรงกับขนาดของภาพเป้าหมายใน voxels เท่านั้น
ส่งค่ากลับ
ตัวอย่างโค้ด
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))