การสร้างแบบจำลอง

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การโมเดล링ของของแข็ง คือกระบวนการรวม ชิ้น เข้าด้วยกันในวิธีที่ไม่ซ้ำกันเพื่อสร้างรูปทรงที่ซับซ้อนมากขึ้นที่รู้จักกันในชื่อ สหภาพ หรือ การแยกทาง คุณสามารถดำเนินการโมเดลิ่งที่แข็งแกร่งได้สี่ครั้งโดยใช้เครื่องมือภายในแท็บ โมเดล ของแถบเครื่องมือ

Studio's Model tab with the Solid Modeling tools highlighted.
เครื่องมือลัดคําอธิบาย
สหภาพ(Windows) (Mac)รวมส่วนสองหรือมากกว่าเพื่อสร้างสหภาพเดียวที่แข็งแกร่ง
ซ้อนทับ(Windows) (Mac)ผสานชิ้นส่วนซ้อนทับเข้าด้วยกันเป็นช่องว่างเดียว
เพิกเฉย(Windows) (Mac)ปฏิเสธส่วน มีประโยชน์สำหรับการสร้างหลุมและรอยบุ๋ม
แยก(Windows) (Mac)แยกสหภาพหรือแยกทางแยกกลับเป็นส่วนย่อยของมัน

ชิ้นส่วนสหภาพ

เครื่องมือ สหภาพ รวมสองส่วนหรือมากกว่าเข้าด้วยกันเพื่อสร้างเป็นของแข็งเดียว UnionOperationโดยค่าเริ่มต้น สหภาพใหม่จะเคารพคุณสมบัติ Color ของแต่ละส่วน แม้ว่าคุณจะสามารถเปิดใช้งานคุณสมบัติ UsePartColor ของมันเพื่อเปลี่ยนสหภาพทั้งหมดเป็นสีเฉพาะได้

Block and cylinder parts overlapping

เพื่อรวมชิ้นส่วนเข้าด้วยกันเป็นสหภาพ:

  1. เลือกชิ้นส่วนทั้งหมดที่คุณต้องการรวมกัน
  2. คลิกปุ่ม สหภาพ ทั้งหมดของชิ้นส่วนรวมเป็นหนึ่งเดียว UnionOperation ด้วยชื่อ สหภาพ

ตัดส่วน

เครื่องมือ ซ้อน จะซ้อนส่วนที่ซ้อนทับกันเป็นของแข็งเดียว IntersectOperationโดยค่าเริ่มต้นสีใบหน้าของการแยกตัวที่ได้รับจะยืมมาจากคุณสมบัติ Color ของชิ้นส่วนเดิมแม้ว่าคุณจะสามารถเปิดใช้งานคุณสมบัติ UsePartColor เพื่อเปลี่ยนการแยกตัวทั้งหมดเป็นสีเฉพาะได้

Block and cylinder parts overlapping

เพื่อตัดส่วนที่ซ้อนทับกัน:

  1. เลือกชิ้นส่วนทั้งหมดที่คุณต้องการซ้อนทับ
  2. คลิกที่ปุ่ม ซ้อน ทั้งหมดของชิ้นส่วนรวมเป็นหนึ่งเดียว IntersectOperation ด้วยชื่อ การสัมผัส

ปฏิเสธส่วน

เครื่องมือ ปฏิเสธ ปฏิเสธส่วนหนึ่งเพื่อให้เมื่อมัน ผสานกับส่วนอื่น รูปร่างของส่วนที่ถูกปฏิเสธจะถูกหักออกจากส่วนอื่น

Negated block overlapping a cylinder

เพื่อหักส่วนออกจากส่วนที่ซ้อนทับอื่นๆ:

  1. เลือกส่วนที่คุณต้องการปฏิเสธจากส่วนอื่น
  2. คลิก ปฏิเสธ . ส่วนจะกลายเป็น NegateOperation ด้วยชื่อ NegativePart และกลายเป็นสีชมพูและโปร่งใสเพื่อระบุสถานะ
  3. เลือกทั้งส่วนที่ถูกปฏิเสธและส่วนที่คุณต้องการหักออก
  4. คลิก สหภาพ . ส่วนที่ถูกปฏิเสธจะถูกตัดออกจากส่วนที่ซ้อนกันที่รวมอยู่

สหภาพหรือแยกทางแยก

เครื่องมือแยก แยก แยกส่วนหลังออกเป็นส่วนต่างๆ โดยพื้นฐานเป็นเครื่องมือยกเลิกการทำงานสำหรับสหภาพและการแยก

เพื่อแยกสหภาพหรือแยกทางแยกกลับเป็นส่วนย่อยๆ:

  1. เลือกสหภาพหรือส่วนบรรทัด เช่น
  2. คลิก แยก . ชิ้นส่วนแยกกลับไปสู่รูปแบบเดิม

เรนเดอร์ความจงรักภักดี

โดยค่าเริ่มต้น การดำเนินการโมเดลแข็งใหม่จะแสดงเสมอในความถูกต้องของการเรนเดอร์ Automatic ซึ่งหมายความว่ารายละเอียดของชิ้นส่วนจะขึ้นอยู่กับระยะห่างจากกล้องตามที่ระบุไว้ในตารางต่อไปนี้

ระยะห่างจากกล้องเรนเดอร์ความจงรักภักดี
น้อยกว่า 250 สตัดสูงสุด
250-500 สตัดปานกลาง
สตัด 500 หรือมากกว่าต่ำสุด

มุมการบีบอัด

คุณสมบัติของชิ้นส่วนโมเดลที่แข็งแรงช่วยให้มุมระหว่างพื้นผิวที่อยู่ติดกันของสีหรือวัสดุเดียวกันนุ่มขึ้น SmoothingAngleค่าที่สูงกว่าผลิตลักษณะที่นุ่มนวลขึ้นในขณะที่ค่าที่ต่ำกว่าผลิตลักษณะที่หยาบกว่าด้วยขอบที่คมขึ้น

ในขณะที่ค่าระหว่าง 30 และ 70 ผลการค้นหาค่าระหว่าง 90 และ 180 ไม่แนะนำเนื่องจากอาจทําให้เกิดผลกระทบ "เงา" ต่อสหภาพและการแยกกับขอบที่แหลมคม

การสร้างแบบจำลอง

นอกจากเครื่องมือ สหภาพ , แตะ , และ ปฏิเสธ ใน Studio คุณสามารถอนุญาตให้ผู้เล่นใช้การดำเนินการโมเดลิงที่แข็งแกร่งขณะอยู่ภายในประสบการณ์ผ่าน UnionAsync() , IntersectAsync() และ SubtractAsync()วิธีเหล่านี้ทั้งหมดต้องถูกเรียกบน BasePart และต้องใช้ชุดของหนึ่งหรือมากกว่าส่วนที่จะรวมกัน ซับซ้อน หรือลบออกจากส่วนที่เรียก

สหภาพAsync()

เพื่อสาธิต UnionAsync() , การใช้ต่อไปนี้ Script ใช้ ส่วนที่ 1 จากพื้นที่ทำงาน, รวมกับ BasePart , ส่วนที่ 3 และ ส่วนที่ 4 จากพื้นที่ที่เกิดขึ้นในตำแหน่งเดิมของ ส่วนที่ 1 , จากนั้นผู้ปกครองผลลัพธ์ BaseParts ไปยังพื้นที่ที่เดิมของ UnionOperation ในตำแหน่งเดิมของ ส่วนที่ 1 Thai:To demonstrate , the following uses the Part1 from the workspace, unions it together with the Part2 , Part3 , and Part4 , then parents the resulting to the workspace at the original position of Part1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- ดำเนินการรวมขั้นตอน
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- หากการดำเนินการสําเร็จ ให้วางตําแหน่งไว้ในตําแหน่งเดียวกันและส่งมอบให้กับพื้นที่ทํางาน
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- ทำลายชิ้นส่วนเดิมที่ยังคงสมบูรณ์หลังการดำเนินการ
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

สะท้อนกันAsync()

เพื่อสาธิต , ต่อไปนี้ ใช้ ส่วนที่ 1 จากพื้นที่ทำงาน, ซ้อนทับกับ ส่วนที่ 2 และ ส่วนที่ 3 จากพื้นที่, จากนั้นพ่วงผลลัพธ์ ของ ไปยังพื้นที่เดิมของ ส่วนที่ 1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3}
-- ดำเนินการบดขยี้ตัวเลือก
local success, newIntersect = pcall(function()
return mainPart:IntersectAsync(otherParts)
end)
-- หากการดำเนินการสําเร็จ ให้วางตําแหน่งไว้ในตําแหน่งเดียวกันและส่งมอบให้กับพื้นที่ทํางาน
if success and newIntersect then
newIntersect.Position = mainPart.Position
newIntersect.Parent = Workspace
end
-- ทำลายชิ้นส่วนเดิมที่ยังคงสมบูรณ์หลังการดำเนินการ
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end

ลบออก Async()

เพื่อสาธิต , ต่อไปนี้ ใช้ ส่วนที่ 1 จากพื้นที่ทำงาน, ปฏิเสธ ส่วนที่ 2 , ส่วนที่ 3 และ ส่วนที่ 4 จากมัน, จากนั้นผู้ปกครองผลลัพธ์ จากพื้นที่เดิมของ ส่วนที่ 1 ไปยังพื้นที่ทำงานในตำแหน่งเดิมของ ส่วนที่ 4 Thai:To demonstrate , the following uses the Part1 from the workspace, negates the Part2 , Part3 และ Part4 จากมัน, then parents the resulting ไปยังพื้นที่ทำงานในตำแหน่งเดิมของ ส่วนที่ 1 .


local Workspace = game:GetService("Workspace")
local mainPart = Workspace.Part1
local otherParts = {Workspace.Part2, Workspace.Part3, Workspace.Part4}
-- ดำเนินการบวกลบ
local success, newSubtract = pcall(function()
return mainPart:SubtractAsync(otherParts)
end)
-- หากการดำเนินการสําเร็จ ให้วางตําแหน่งไว้ในตําแหน่งเดียวกันและส่งมอบให้กับพื้นที่ทํางาน
if success and newSubtract then
newSubtract.Position = mainPart.Position
newSubtract.Parent = Workspace
end
-- ทำลายชิ้นส่วนเดิมที่ยังคงสมบูรณ์หลังการดำเนินการ
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end