BasePart
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
BasePart เป็นคลาสระดับสูงสำหรับวัตถุในโลกที่แสดงและจำลองทางกายภาพในขณะที่อยู่ใน Workspaceมีการใช้งานหลายอย่างของ BasePart , ที่พบบ่อยที่สุดคือ Part และ MeshPartอื่นๆ รวมถึง WedgePart , SpawnLocation และวัตถุโซลเดียว Terrainโดยทั่วไปเมื่อเอกสารอ้างถึง "ส่วน" ส่วนใหญ่ BasePart การดำเนินการจะทำงานและไม่เพียงแค่ Part
สำหรับข้อมูลเกี่ยวกับวิธีที่ BaseParts จะถูกจัดเป็นกลุ่มเป็นร่างแข็งจำลองดูได้ที่ ชิ้นส่วน
มีวัตถุที่แตกต่างกันมากมายที่โต้ตอบกับ BasePart (นอกเหนือจาก Terrain ) รวมถึง:
- A Decal ใช้เทกเจอร์ภาพขยายบนใบหน้าของ BasePart ในขณะที่ A Texture ใช้เทกเจอร์ภาพแบบกระเบื้องบนใบหน้าดู เทกเจอร์และภาพวาด .
- Attachments สามารถเพิ่มไปยัง BasePart เพื่อระบุ CFrames เกี่ยวกับส่วนสิ่งเหล่านี้มักใช้โดยวัตถุทางกายภาพ Constraint ตามที่อธิบายไว้ใน ข้อจํากัดทางกล และ ข้อจํากัดของตัวขับเคลื่อน
- ParticleEmitter วัตถุปล่อยอนุภาคอย่างสม่ำเสมอในปริมาณของ BasePart ที่พวกเขาเป็นพ่อแม่ ดู ผู้ปล่อยอนุภาค
สรุป
คุณสมบัติ
กำหนดว่าชิ้นส่วนเป็นอนันต์ตามฟิสิกส์หรือไม่
ความเร็วในแนวมุมของการประกอบชิ้นส่วน
ศูนย์กลางของมวลของการประกอบชิ้นส่วนในพื้นที่โลก
ความเร็วเชิงเส้นของการประกอบชิ้นส่วน
มวลรวมของการประกอบชิ้นส่วน
การอ้างอิงถึงส่วนรากของการประกอบ
กำหนดว่าชิ้นจะโต้ตอบกับการจำลองเสียงทางกายภาพหรือไม่ คล้ายกับ CastShadow สำหรับแสง
กำหนดประเภทพื้นผิวสำหรับด้านหลังของชิ้นส่วน
กำหนดประเภทพื้นผิวสำหรับด้านล่างของชิ้นส่วน
กำหนดสีของชิ้นส่วน
กำหนดตำแหน่งและทิศทางของ BasePart ในโลก
กำหนดว่าชิ้นส่วนจะชนกับชิ้นส่วนอื่นหรือไม่
กำหนดว่าชิ้นส่วนจะถูกพิจารณาในระหว่างการดำเนินการค้นหาในพื้นที่หรือไม่
กำหนดว่าจะมีการเรียกไฟ Touched และ TouchEnded กิจกรรมบนส่วนหรือไม่
กำหนดว่าส่วนใดมีเงาหรือไม่
อธิบายตำแหน่งของโลกที่ศูนย์กลางของมวลของชิ้นส่วนอยู่
อธิบายชื่อกลุ่มการชนกันของชิ้นส่วน
กำหนดสีของชิ้นส่วน
บ่งชี้คุณสมบัติทางกายภาพปัจจุบันของชิ้นส่วน
กำหนดคุณสมบัติทางกายภาพหลายอย่างของชิ้นส่วน
ใช้เพื่อเปิดใช้งานหรือปิดใช้งานแรงอากาศในชิ้นส่วนและชิ้นส่วนประกอบ
ขนาดทางกายภาพที่แท้จริงของ BasePart ตามที่เครื่องกลศาสตร์กำหนด
กำหนดประเภทพื้นผิวสำหรับด้านหน้าของชิ้นส่วน
กำหนดประเภทพื้นผิวสำหรับด้านซ้ายของชิ้นส่วน
กำหนดตัวคูณสำหรับ BasePart.Transparency ที่มองเห็นได้เฉพาะกับไคลเอนต์ท้องถิ่นเท่านั้น
กำหนดว่าส่วนใดสามารถเลือกได้ใน Studio
อธิบายมวลของชิ้นส่วน ผลิตภัณฑ์ของความหนาแน่นและปริมาณ
กำหนดว่าชิ้นส่วนมีส่วนร่วมในมวลหรือแรงเฉื่อยของร่างกายแข็งหรือไม่
กำหนดเทกเจอร์และคุณสมบัติทางกายภาพเริ่มต้นของชิ้นส่วน
ชื่อของ MaterialVariant .
อธิบายการหมุนของชิ้นส่วนในโลก
ระบุออฟเซ็ตของจุดศูนย์กลางของชิ้นส่วนจาก CFrame ของมัน
อธิบายตำแหน่งของชิ้นส่วนในโลก
เวลาตั้งแต่อัปเดตฟิสิกส์ครั้งล่าสุด
กำหนดจํานวนส่วนที่สะท้อนกล่องท้องฟ้าได้
อธิบายการเปลี่ยนแปลงขนาดเล็กที่สุดที่อนุญาตโดยวิธี Resize()
อธิบายใบหน้าที่ส่วนสามารถปรับขนาดได้
กำหนดประเภทพื้นผิวสำหรับด้านขวาของชิ้นส่วน
กฎหลักในการกำหนดส่วนรากของการประกอบ
การหมุนของชิ้นส่วนในองศาสำหรับสามแกน
กำหนดขนาดของชิ้นส่วน (ความยาว ความกว้าง ความสูง)
กำหนดประเภทพื้นผิวสำหรับด้านบนของชิ้นส่วน
กำหนดจำนวนส่วนที่สามารถมองเห็นได้ผ่าน (ตรงกันข้ามของความทึบของส่วน)
วิธีการ
ใช้แรงกระตุกแบบมุมกับการประกอบ
ใช้แรงกระตุ้นกับการประกอบที่การประกอบ center of mass .
ใช้แรงกระตุ้นกับการประกอบในตำแหน่งที่กำหนด
ส่งคืนว่าชิ้นส่วนสามารถชนกันได้หรือไม่
ตรวจสอบว่าคุณสามารถกำหนดสิทธิ์เจ้าของเครือข่ายส่วนได้หรือไม่
คืนตารางชิ้นส่วนที่เชื่อมโยงกับวัตถุโดยใช้ข้อต่อแข็งใดๆ
คืนข้อต่อหรือข้อจำกัดทั้งหมดที่เชื่อมโยงกับส่วนนี้
ส่งค่าของคุณสมบัติ Mass กลับ
ส่งคืนผู้เล่นปัจจุบันที่เป็นเจ้าของเครือข่ายส่วนนี้หรือ nil ในกรณีของเซิร์ฟเวอร์
ส่งคืนค่าจริงหากเครื่องเกมตัดสินเจ้าของเครือข่ายสำหรับส่วนนี้โดยอัตโนมัติ
คืนส่วนฐานของการประกอบชิ้นส่วน
คืนตารางของชิ้นส่วนทั้งหมด BasePart.CanCollide ที่ถูกตัดกับชิ้นส่วนนี้
คืนความเร็วเชิงเส้นของการประกอบชิ้นส่วนในตำแหน่งที่กำหนดเมื่อเทียบกับชิ้นส่วนนี้
ส่งคืนจริงหากวัตถุเชื่อมต่อกับส่วนที่จะถือไว้ในตําแหน่ง (เช่นส่วน Anchored ) มิฉะนั้นจะส่งคืนเป็นเท็จ
เปลี่ยนขนาดของวัตถุเช่นเดียวกับการใช้เครื่องมือปรับขนาดของ 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 จากส่วน, บวกกับรูปร่างที่ใช้โดยชิ้นส่วนในช่วงที่กำหนด
รับจุดศูนย์กลางของ PVInstance .
เปลี่ยน PVInstance พร้อมกับบรรดาลูกหลานทั้งหมดของมัน PVInstances ทำให้จุดศูนย์กลางอยู่ที่ตําแหน่งที่ระบุแล้ว CFrame
อีเวนต์
ไฟเมื่อชิ้นหยุดสัมผัสอีกชิ้นเนื่องจากการเคลื่อนไหวทางกายภาพ
ไฟเมื่อชิ้นส่วนสัมผัสกับชิ้นส่วนอื่นเนื่องจากการเคลื่อนไหวทางกายภาพ
คุณสมบัติ
Anchored
คุณสมบัติ Anchored จะกำหนดว่าชิ้นส่วนจะไม่สามารถย้ายได้โดยฟิสิกส์เมื่อเปิดใช้งานแล้ว ผลการค้นหาการชนกันของส่วนอื่น ๆ ซ้อนทับส่วนอื่น ๆ หรือสาเหตุทางฟิสิกส์อื่น ๆผลที่ตามมาคือสองส่วนที่ถูกยึดจะไม่เคยยิงเหตุการณ์ Touched ให้กับอีกฝ่ายหนึ่ง
ส่วนที่ถูกยึดอาจยังคงเคลื่อนไหวได้โดยการเปลี่ยน CFrame หรือ Position และยังอาจมี AssemblyLinearVelocity และ AssemblyAngularVelocity ที่ไม่เป็นศูนย์
สุดท้ายหากส่วนที่ไม่ได้ติดตั้งถูกเชื่อมโยงกับส่วนที่ติดตั้งผ่านวัตถุเช่น Weld ก็จะกระทำตามตัวเชื่อมต่อเช่นกันหากข้อต่อดังกล่าวแตก ส่วนอาจได้รับผลกระทบจากฟิสิกส์อีกครั้งดู ชิ้นส่วน สำหรับรายละเอียดเพิ่มเติม
ไม่สามารถตั้งค่าเจ้าของเครือข่ายในส่วนที่ติดตั้งได้หากสถานะที่ติดตั้งของส่วนเปลี่ยนแปลงบนเซิร์ฟเวอร์ เจ้าของเครือข่ายของส่วนนั้นจะได้รับผลกระทบ
ตัวอย่างโค้ด
This code sample will allow a part to be clicked to toggle its anchored property. When toggled, the visual appearance of the part is updated (red means anchored, yellow means free).
local part = script.Parent
-- Create a ClickDetector so we can tell when the part is clicked
local cd = Instance.new("ClickDetector", part)
-- This function updates how the part looks based on its Anchored state
local function updateVisuals()
if part.Anchored then
-- When the part is anchored...
part.BrickColor = BrickColor.new("Bright red")
part.Material = Enum.Material.DiamondPlate
else
-- When the part is unanchored...
part.BrickColor = BrickColor.new("Bright yellow")
part.Material = Enum.Material.Wood
end
end
local function onToggle()
-- Toggle the anchored property
part.Anchored = not part.Anchored
-- Update visual state of the brick
updateVisuals()
end
-- Update, then start listening for clicks
updateVisuals()
cd.MouseClick:Connect(onToggle)
AssemblyAngularVelocity
เวกเตอร์ความเร็วมุมของการประกอบชิ้นส่วนนี้ เป็นอัตราการเปลี่ยนแปลงของทิศทางในรัศมีต่อวินาที
ความเร็วแบบมุมเป็นเช่นเดียวกันที่ทุกจุดของการประกอบ
การตั้งค่าความเร็วโดยตรงอาจนำไปสู่การเคลื่อนไหวที่ไม่สมจริงการใช้ข้อจํากัด Torque หรือ AngularVelocity จะได้รับการยอมรับ หรือใช้ ApplyAngularImpulse() หากต้องการการเปลี่ยนแปลงความเร็วทันที
หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ คุณสมบัตินี้ต้องเปลี่ยนจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ คุณสมบัตินี้สามารถเปลี่ยนได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเปลี่ยนแปลงจากสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล
AssemblyCenterOfMass
ตำแหน่งที่คำนวณผ่าน Mass และ Position ของชิ้นส่วนทั้งหมดในการประกอบ
หากการประกอบมีส่วนที่ติดตั้งอยู่ ศูนย์กลางของมวลของส่วนนั้นจะเป็นศูนย์กลางของมวลของการประกอบ และการประกอบจะมีมวลไม่มีที่สิ้นสุด
รู้จุดศูนย์กลางของมวลช่วยให้การประกอบรักษาความเสถียรได้แรงที่ใช้กับศูนย์กลางของมวลจะไม่ทําให้เกิดการเร่งแบบมุม เฉพาะแบบเชิงเส้นเท่านั้นการประกอบที่มีศูนย์กลางมวลต่ำจะมีเวลาที่ดีกว่าในการยืนตัวตรงภายใต้ผลกระทบของแรงโน้มถ่วง
AssemblyLinearVelocity
เวกเตอร์ความเร็วเชิงเส้นของการประกอบชิ้นส่วนนี้ เป็นอัตราการเปลี่ยนแปลงในตําแหน่งของ AssemblyCenterOfMass ในสตัดต่อวินาที
หากต้องการทราบความเร็วที่จุดอื่นนอกเหนือจากศูนย์กลางของมวลของการประกอบใช้ GetVelocityAtPosition()
การตั้งค่าความเร็วโดยตรงอาจนำไปสู่การเคลื่อนไหวที่ไม่สมจริงการใช้ข้อจํากัด VectorForce จะได้รับการยอมรับ หรือใช้ ApplyImpulse() หากต้องการการเปลี่ยนแปลงความเร็วทันที
หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ คุณสมบัตินี้ต้องเปลี่ยนจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ คุณสมบัตินี้สามารถเปลี่ยนได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเปลี่ยนแปลงจากสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล
AssemblyMass
ผลบวกของมวลของทั้งหมด BaseParts ในการประกอบส่วนนี้ชิ้นส่วนที่มี Massless และไม่ใช่ส่วนรากของการประกอบจะไม่มีส่วนร่วมใน AssemblyMass
หากชิ้นส่วนที่ยึดถืออยู่อยู่ในการประกอบ มวลของชิ้นส่วนจะถือว่าเป็นอนันต์ข้อจํากัดและการโต้ตอบทางกายภาพอื่น ๆ ระหว่างชิ้นส่วนที่ไม่ได้ติดตั้งที่มีความแตกต่างขนาดใหญ่อาจทําให้เกิดความไม่เสถียรได้
AssemblyRootPart
คุณสมบัตินี้บ่งบอกถึงการเลือก BasePart โดยอัตโนมัติเพื่อแทนที่ส่วนรากของการรวบรวมเป็นส่วนเดียวกันที่จะถูกส่งคืนเมื่อนักพัฒนาเรียก GetRootPart()
ส่วนรากสามารถเปลี่ยนได้โดยการเปลี่ยน RootPriority ของชิ้นส่วนในการประกอบ
ชิ้นส่วนที่ทั้งหมดแชร์สิ่งเดียวกัน AssemblyRootPart อยู่ในการประกอบเดียวกัน
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับส่วนราก ดู กลุ่มส่วน
AudioCanCollide
AudioCanCollide กำหนดว่าชิ้นจะโต้ตอบกับการจำลองเสียงทางกายภาพหรือไม่ เช่นเดียวกับ CastShadow สำหรับแสง
เมื่อปิดใช้งานแล้ว เสียงจะผ่านผ่านส่วน; ไม่ถูกปิดกั้นหรือสะท้อน
BackSurface
คุณสมบัติ BackSurface กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางบวก Z ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
BottomSurface
คุณสมบัติ BottomSurface กำหนดประเภทของพื้นผิวที่ใช้สำหรับทิศทางเชิงลบ Y ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
BrickColor
คุณสมบัตินี้กำหนดสีของชิ้นส่วนหากส่วนมี Material ก็จะกำหนดสีที่ใช้เมื่อเรนเดอร์ส่วนวัสดุเช่นกันสำหรับการควบคุมสีเพิ่มเติม คุณสมบัติ Color สามารถใช้ได้และคุณสมบัตินี้จะใช้ BrickColor ที่ใกล้ที่สุด
คุณสมบัติภาพอื่นๆ ของชิ้นส่วนจะถูกกำหนดโดย Transparency และ Reflectance
CFrame
คุณสมบัติ CFrame กำหนดทั้งตำแหน่งและทิศทางของ BasePart ในโลกมันทำหน้าที่เป็นตำแหน่งอ้างอิงแบบสุ่มบนเรขาคณิต แต่ ExtentsCFrame เป็นตัวแทนของจุดศูนย์กลางทางกายภาพที่เป็นจริง CFrame
เมื่อตั้งค่า CFrame บนส่วนหนึ่ง ส่วนอื่นที่เข้าร่วมจะย้ายเป็นสัดส่วนกับส่วนด้วย แต่ขอแนะนำให้คุณใช้ PVInstance:PivotTo() เพื่อย้ายโมเดลทั้งหมด เช่น เมื่อเทเลพอร์ตตัวละครของผู้เล่น
ไม่เหมือนการตั้งค่า BasePart.Position , การตั้งค่า CFrame จะเคลื่อนย้ายส่วนไปยังตำแหน่งที่แน่นอนที่ระบุ CFrame เสมอ; ในคำอื่น ๆ: ไม่มีการตรวจสอบการซ้อนทับที่ทำได้ และตัวแก้ปัญหาด้านฟิสิกส์จะพยายามแก้ปัญหาการซ้อนทับใด ๆ เว้นแต่ทั้งสองส่วนจะเป็น Anchored
สำหรับการติดตามตำแหน่งเมื่อเทียบกับส่วน CFrame อาจเป็นประโยชน์ถ้าใช้ Attachment
ตัวอย่างโค้ด
ตัวอย่างโค้ดนี้แสดงการตั้งค่า CFrame ของส่วนในหลายวิธีที่แตกต่างกันมันแสดงวิธีการสร้างและรวมมูลค่า CFrameมันอ้างอิงถึงส่วนพี่น้องที่เรียกว่า "ส่วนอื่น" เพื่อสาธิตตำแหน่งที่เป็นสัดส่วน
local part = script.Parent:WaitForChild("Part")
local otherPart = script.Parent:WaitForChild("OtherPart")
-- รีเซ็ต CFrame ของชิ้นส่วนเป็น (0, 0, 0) โดยไม่มีการหมุน
-- บางครั้งเรียกว่า "ตัวตน" CFrame
part.CFrame = CFrame.new()
-- ตั้งค่าเป็นตำแหน่งเฉพาะ (X, Y, Z)
part.CFrame = CFrame.new(0, 25, 10)
-- เหมือนดังข้างต้น แต่ใช้ Vector3 แทน
local point = Vector3.new(0, 25, 10)
part.CFrame = CFrame.new(point)
-- ตั้ง CFrame ของชิ้นส่วนให้อยู่ที่จุดหนึ่ง มองไปที่อีกจุดหนึ่ง
local lookAtPoint = Vector3.new(0, 20, 15)
part.CFrame = CFrame.lookAt(point, lookAtPoint)
-- หมุน CFrame ของชิ้นส่วนโดย pi/2 รัศมีบนแกน X ท้องถิ่น
part.CFrame = part.CFrame * CFrame.Angles(math.pi / 2, 0, 0)
-- หมุน CFrame ของชิ้นส่วนโดย 45 องศาบนแกน Y ท้องถิ่น
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(45), 0)
-- หมุน CFrame ของชิ้นส่วนโดย 180 องศาบนแกน Z ทั่วโลก (โปรดทราบลำดับ!)
part.CFrame = CFrame.Angles(0, 0, math.pi) * part.CFrame -- รัศมีของพีเท่ากับ 180 องศา
-- การรวมสองเฟรม C ทำได้โดยใช้ * (ตัวคูณ)
part.CFrame = CFrame.new(2, 3, 4) * CFrame.new(4, 5, 6) --> เท่ากับ CFrame.new(6, 8, 10)
-- ไม่เหมือนการคูณอัลกอริทึ่ม CFrame คอมโพสิชันไม่ใช่การสื่อสาร: a * b ไม่จำเป็นต้องเป็น b * a!
-- จินตนาการ * เป็นชุดของการกระทำที่จัดเรียงไว้ ตัวอย่างเช่น บรรทัดต่อไปนี้ผลิต CFrames ที่แตกต่างกัน:
-- 1) สไลด์หน่วยส่วน 5 บน X
-- 2) หมุนชิ้น 45 องศารอบแกน Y ของมัน
part.CFrame = CFrame.new(5, 0, 0) * CFrame.Angles(0, math.rad(45), 0)
-- 1) หมุนชิ้น 45 องศารอบแกน Y ของมัน
-- 2) สไลด์หน่วยส่วน 5 บน X
part.CFrame = CFrame.Angles(0, math.rad(45), 0) * CFrame.new(5, 0, 0)
-- ไม่มี "การแบ่ง CFrame" แต่แทนที่จะทำ "การดำเนินการย้อนกลับ" แทน
part.CFrame = CFrame.new(4, 5, 6) * CFrame.new(4, 5, 6):Inverse() --> เท่ากับ CFrame.new(0, 0, 0)
part.CFrame = CFrame.Angles(0, 0, math.pi) * CFrame.Angles(0, 0, math.pi):Inverse() --> เท่ากับ CFrame.Angles(0, 0, 0)
-- ตำแหน่งชิ้นส่วนที่เกี่ยวข้องกับอีก (ในกรณีนี้ใส่ชิ้นส่วนของเราบนส่วนอื่น)
part.CFrame = otherPart.CFrame * CFrame.new(0, part.Size.Y / 2 + otherPart.Size.Y / 2, 0)
CanCollide
CanCollide กำหนดว่าชิ้นส่วนจะโต้ตอบทางกายภาพกับชิ้นส่วนอื่นหรือไม่เมื่อปิดใช้งานแล้ว ส่วนอื่นๆ สามารถผ่านส่วนได้โดยไม่สะดุดชิ้นส่วนที่ใช้สําหรับการตกแต่ง มักจะมี ถูกปิดใช้งานเนื่องจากไม่จําเป็นต้องพิจารณาโดยเครื่องกลศาสตร์
หากส่วนไม่ได้เป็น Anchored และมี CanCollide ถูกปิดใช้งาน อาจหลุดออกจากโลกและถูกทําลายในที่สุดโดย Workspace.FallenPartsDestroyHeight
เมื่อ CanCollide ถูกปิดใช้งาน ชิ้นส่วนอาจยังคงเปิดใช้งานอีเวนต์ Touched (เช่นเดียวกับชิ้นส่วนอื่นๆ ที่สัมผัสกับพวกเขา)คุณสามารถปิดใช้งานสิ่งนี้ด้วย CanTouch
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการชนกัน ดู การชนกัน
ตัวอย่างโค้ด
This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.
-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()
CanQuery
คุณสมบัตินี้กำหนดว่าชิ้นส่วนจะถูกพิจารณาระหว่างการดำเนินการค้นหาในพื้นที่หรือไม่ เช่น GetPartBoundsInBox หรือ Raycastโปรดทราบว่า CanCollide จะต้องถูกปิดใช้งานเพื่อให้ CanQuery มีผลบังคับใช้ และฟังก์ชันการค้นหาในพื้นที่จะไม่รวมส่วนที่มี CanQuery ของ false
นอกเหนือจากคุณสมบัตินี้แล้วยังเป็นไปได้ที่จะยกเว้นส่วนที่เป็นลูกหลานของรายการส่วนที่กำหนดโดยใช้วัตถุ OverlapParams หรือ RaycastParams เมื่อเรียกฟังก์ชันคำถามเชิงพื้นที่
CanTouch
คุณสมบัตินี้กำหนดว่าเหตุการณ์ Touched และ TouchEnded จะเกิดขึ้นบนส่วนหรือไม่หาก true ส่วนอื่นที่สัมผัสก็ต้องมี CanTouch ตั้งค่าเป็น true เพื่อให้เหตุการณ์สัมผัสจะเกิดขึ้นหาก false ไม่สามารถตั้งเหตุการณ์แตะได้สำหรับส่วนและพยายามทำเช่นนั้นจะเกิดข้อผิดพลาดเช่นเดียวกันหากคุณสร้างคุณสมบัติเป็น false หลังจากเชื่อมต่อเหตุการณ์แตะแล้ว เหตุการณ์จะถูกตัดการเชื่อมต่อและลบ TouchTransmitter
โปรดทราบว่าโลจิสต์การชนกันนี้สามารถตั้งค่าให้เคารพ กลุ่มการชน ผ่านคุณสมบัติ Workspace.TouchesUseCollisionGroupsหาก true ส่วนในกลุ่มที่ไม่ชนกันจะเพิกเฉยทั้งการชนกัน และ เหตุการณ์สัมผัส ดังนั้นทำให้คุณสมบัตินี้ไม่เกี่ยวข้อง
ประสิทธิภาพ
มีการได้รับประสิทธิภาพเล็กน้อยในส่วนที่มีทั้ง CanTouch และ CanCollide ตั้งค่าเป็น false เนื่องจากส่วนเหล่านี้จะไม่จำเป็นต้องคำนวณชนิดของการชนกันระหว่างส่วนใดอย่างไรก็ตามพวกเขายังคงสามารถโดนโดยคำถาม Raycasts และ OverlapParams ได้
CastShadow
กำหนดว่าส่วนใดมีเงาหรือไม่การปิดใช้งานคุณสมบัตินี้สำหรับส่วนที่กำหนดอาจทําให้เกิดวัตถุทางศิลปะบนเงาที่โยนบนส่วนนั้น
การดำเนินการแต่ในฉากที่ซับซ้อน การปิดใช้งานอย่างเชิงกลยุทธ์ในส่วนบางส่วนอาจปรับปรุงประสิทธิภาพได้เนื่องจากความเป็นไปได้ของวัตถุโบราณทางสายตา เราขอแนะนำให้เก็บไว้เปิดใช้งานบนทุกส่วนในสถานการณ์ส่วนใหญ่
CenterOfMass
คุณสมบัติ CenterOfMass อธิบายตำแหน่ง ท้องถิ่น ของศูนย์กลางของมวลของชิ้นส่วนหากนี่เป็นการประกอบชิ้นส่วนเดียว นี่คือ AssemblyCenterOfMass ที่แปลงจากพื้นที่โลกเป็นท้องถิ่นบนง่าย Parts , ศูนย์กลางของมวลเป็นเสมอ (0, 0, 0) , แต่มันสามารถแตกต่างได้สำหรับ WedgePart หรือ MeshPart .
CollisionGroup
คุณสมบัติ CollisionGroup อธิบายชื่อกลุ่มการชนกันของชิ้นส่วน (สูงสุด 100 ตัวอักษร)ชิ้นส่วนเริ่มต้นในกลุ่มเริ่มต้นที่มีชื่อเป็น "Default"ค่านี้ไม่สามารถว่างเปล่าได้
แม้ว่าคุณสมบัตินี้จะไม่ซ้ำกัน แต่เครื่องยนต์จะสร้างค่าซ้ำภายในโดยใช้คุณสมบัติส่วนตัวอื่นเพื่อแก้ปัญหาการย้อนกลับไปข้างหลัง
ตัวอย่างโค้ด
This example demonstrates one basic use of collision groups. It assigns BallPart to "CollisionGroupBall" and DoorPart to "CollisionGroupDoor", then makes the two groups non-collidable using PhysicsService:CollisionGroupSetCollidable().
local PhysicsService = game:GetService("PhysicsService")
local collisionGroupBall = "CollisionGroupBall"
local collisionGroupDoor = "CollisionGroupDoor"
-- Register collision groups
PhysicsService:RegisterCollisionGroup(collisionGroupBall)
PhysicsService:RegisterCollisionGroup(collisionGroupDoor)
-- Assign parts to collision groups
script.Parent.BallPart.CollisionGroup = collisionGroupBall
script.Parent.DoorPart.CollisionGroup = collisionGroupDoor
-- Set groups as non-collidable with each other and check the result
PhysicsService:CollisionGroupSetCollidable(collisionGroupBall, collisionGroupDoor, false)
print(PhysicsService:CollisionGroupsAreCollidable(collisionGroupBall, collisionGroupDoor)) --> false
Color
คุณสมบัติ Color กำหนดสีของชิ้นส่วนหากส่วนมี Material ก็จะกำหนดสีที่ใช้เมื่อเรนเดอร์ส่วนวัสดุเช่นกัน
หากคุณสมบัตินี้ถูกตั้งค่า BrickColor จะใช้การจับคู่ที่ใกล้เคียงที่สุดกับค่า Color นี้
คุณสมบัติภาพอื่นๆ ของชิ้นส่วนจะถูกกำหนดโดย Transparency และ Reflectance
ตัวอย่างโค้ด
ตัวอย่างโค้ดนี้สีตัวละครทั้งหมดของผู้เล่นตามจำนวนพลังชีพที่พวกเขามีมันสร้างสีขึ้นอยู่กับสุขภาพสูงสุดของพวกเขาจากนั้นตั้งค่าคุณสมบัติสีของวัตถุภายในตัวละครของพวกเขา ลบวัตถุเพิ่มเติมใดๆ
-- วางลงในสคริปต์ภายใน StarterCharacterScripts
-- จากนั้นเล่นเกมและเล่นกับสุขภาพของตัวละครของคุณ
local char = script.Parent
local human = char.Humanoid
local colorHealthy = Color3.new(0.4, 1, 0.2)
local colorUnhealthy = Color3.new(1, 0.4, 0.2)
local function setColor(color)
for _, child in pairs(char:GetChildren()) do
if child:IsA("BasePart") then
child.Color = color
while child:FindFirstChildOfClass("Decal") do
child:FindFirstChildOfClass("Decal"):Destroy()
end
elseif child:IsA("Accessory") then
child.Handle.Color = color
local mesh = child.Handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
elseif child:IsA("Shirt") or child:IsA("Pants") then
child:Destroy()
end
end
end
local function update()
local percentage = human.Health / human.MaxHealth
-- สร้างสีโดยใช้การเปลี่ยนแปลงตามร้อยละของสุขภาพของคุณ
-- สีจะเปลี่ยนจากสุขภาพดี (100%) ----- > สีไม่ดี (0%)
local color = Color3.new(
colorHealthy.R * percentage + colorUnhealthy.r * (1 - percentage),
colorHealthy.G * percentage + colorUnhealthy.g * (1 - percentage),
colorHealthy.B * percentage + colorUnhealthy.b * (1 - percentage)
)
setColor(color)
end
update()
human.HealthChanged:Connect(update)
CurrentPhysicalProperties
CurrentPhysicalProperties ระบุคุณสมบัติทางกายภาพปัจจุบันของชิ้นส่วนคุณสามารถกำหนดค่าตัวเลขที่กําหนดเองสําหรับคุณสมบัติทางกายภาพต่อชิ้น, วัสดุที่กําหนดเอง และการยกเลิกวัสดุเครื่อง Roblox ให้ความสำคัญกับการจำแนกที่ละเอียดมากขึ้นเมื่อกำหนดคุณสมบัติทางกายภาพที่มีประสิทธิภาพของชิ้นส่วนค่าในรายการต่อไปนี้อยู่ในลำดับจากสูงสุดไปยังลําดับความสําคัญต่ําสุด:
- คุณสมบัติทางกายภาพที่กำหนดเองของชิ้นส่วน
- คุณสมบัติทางกายภาพที่กำหนดเองของวัสดุที่กำหนดเองของชิ้นส่วน
- คุณสมบัติทางกายภาพที่กำหนดเองของการเขียนทับวัสดุของชิ้นส่วน
- คุณสมบัติทางกายภาพเริ่มต้นของวัสดุของชิ้นส่วน
CustomPhysicalProperties
CustomPhysicalProperties ช่วยให้คุณปรับแต่งลักษณะทางกายภาพต่างๆ ของชิ้นส่วน เช่น ความหนาแน่น การเสียดสี และความยืดหยุ่น
หากเปิดใช้งานแล้ว คุณสมบัตินี้ช่วยให้คุณกำหนดค่าคุณสมบัติทางกายภาพเหล่านี้หากปิดใช้งานคุณสมบัติทางกายภาพเหล่านี้จะถูกกำหนดโดย Material ของส่วน
ตัวอย่างโค้ด
This code sample demonstrates how to set the CustomPhysicalProperties property of a part.
local part = script.Parent
-- This will make the part light and bouncy!
local DENSITY = 0.3
local FRICTION = 0.1
local ELASTICITY = 1
local FRICTION_WEIGHT = 1
local ELASTICITY_WEIGHT = 1
local physProperties = PhysicalProperties.new(DENSITY, FRICTION, ELASTICITY, FRICTION_WEIGHT, ELASTICITY_WEIGHT)
part.CustomPhysicalProperties = physProperties
EnableFluidForces
เมื่อ true และเมื่อ Workspace.FluidForces เปิดใช้งานแล้ว ทำให้เครื่องกลศาสตร์คำนวณแรงอากาศพลศาสตร์บน BasePart นี้
FrontSurface
คุณสมบัติ FrontSurface กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางเชิงลบ Z ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
LeftSurface
คุณสมบัติ LeftSurface กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางเชิงลบ X ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
LocalTransparencyModifier
คุณสมบัติ LocalTransparencyModifier เป็นตัวคูณสำหรับ Transparency ที่มองเห็นได้เฉพาะกับไคลเอนต์ท้องถิ่นเท่านั้นมันไม่ได้สําเนาจากไคลเอนต์ไปยังเซิร์ฟเวอร์และมีประโยชน์เมื่อส่วนหนึ่งไม่ควรแสดงผลสําหรับไคลเอนต์เฉพาะรายหนึ่ง เช่น เมื่อผู้เล่นไม่เห็นส่วนของร่างกายของตัวละครของพวกเขาเมื่อพวกเขาซูมเข้าสู่โหมดบุคคลที่หนึ่ง
คุณสมบัตินี้แก้ไขความโปร่งใสของส่วนท้องถิ่นผ่านสูตรต่อไปนี้โดยมีค่าที่เกิดขึ้นระหว่าง 0 และ 1
1 - (( 1 - Transparency ) × ( 1 - LocalTransparencyModifier ))
<th><code>ตัวแก้ไขความโปร่งใสท้องถิ่น</code></th><th>ด้านเซิร์ฟเวอร์</th><th>ฝั่งไคลเอนต์</th></tr></thead><tbody><tr><td><code>0.5</code></td><td><code>0</code></td><td><code>0.5</code></td><td><code>0.5</code></td></tr><tr><td><code>0.5</code></td><td><code>0.25</code></td><td><code>0.5</code></td><td><code>0.625</code></td></tr><tr><td><code>0.5</code></td><td><code>0.5</code></td><td><code>0.5</code></td><td><code>0.75</code></td></tr><tr><td><code>0.5</code></td><td><code>0.75</code></td><td><code>0.5</code></td><td><code>0.875</code></td></tr><tr><td><code>0.5</code></td><td><code>1</code></td><td><code>0.5</code></td><td><code>1</code></td></tr></tbody>
คลาส.BasePart.Transparency|Transparency |
---|
Locked
คุณสมบัติ จะกำหนดว่าส่วนใด (หรือส่วนหนึ่ง) อาจถูกเลือกใน Studio โดยคลิกที่มันคุณสมบัตินี้มักจะเปิดใช้งานบ่อยที่สุดในส่วนภายในโมเดลสภาพแวดล้อมที่ไม่ได้แก้ไขในขณะนี้
ตัวอย่างโค้ด
This code sample uses the concept of recursion to unlock all parts that are a descendant of a model.
-- Paste into a Script within a Model you want to unlock
local model = script.Parent
-- This function recurses through a model's heirarchy and unlocks
-- every part that it encounters.
local function recursiveUnlock(object)
if object:IsA("BasePart") then
object.Locked = false
end
-- Call the same function on the children of the object
-- The recursive process stops if an object has no children
for _, child in pairs(object:GetChildren()) do
recursiveUnlock(child)
end
end
recursiveUnlock(model)
Mass
Mass เป็นคุณสมบัติอ่านได้ที่อธิบายถึงผลิตภัณฑ์ของปริมาณและความหนาแน่นของชิ้นส่วน มันจะถูกส่งคืนโดยฟังก์ชัน GetMass()
- ความหนาแน่นของชิ้นส่วนจะถูกกำหนดโดย Material หรือ CustomPhysicalProperties ถ้าระบุ
Massless
หากคุณสมบัตินี้เปิดใช้งานแล้วชิ้นส่วนจะไม่มีส่วนร่วมในมวลรวมหรือแรงเฉื่อยของการประกอบจนกว่าจะถูกเชื่อมต่อกับชิ้นส่วนอื่นที่มีมวล
หากส่วนเป็นส่วนรากของตัวเองตาม AssemblyRootPart ส่วนนี้จะถูกเพิกเฉยสำหรับส่วนนั้นและจะยังคงมีส่วนร่วมในมวลและแรงเฉื่อยในการประกอบของมันเช่นเดียวกับส่วนปกติชิ้นส่วนที่ไม่มีมวลไม่ควรกลายเป็นส่วนรากของการประกอบไม่ว่าจะเป็นส่วนอื่นๆ ในการประกอบทั้งหมดหรือไม่
นี่อาจมีประโยชน์สำหรับสิ่งเช่นอุปกรณ์เสริมที่ไม่จำเป็นบนยานพาหนะที่คุณไม่ต้องการที่จะส่งผลต่อการจัดการของรถหรือเมชรวมที่ไม่มีมวลเชื่อมต่อกับเมชการชนที่เรียบง่าย
ดูเพิ่มเติม ชิ้นส่วนรวม บทความที่อธิบายสิ่งที่เป็นส่วนรากและวิธีการใช้งาน
Material
คุณสมบัติ Material ช่วยให้คุณสามารถตั้งค่าเทกเจอร์และคุณสมบัติทางกายภาพเริ่มต้นของชิ้นส่วน (ในกรณีที่ CustomPhysicalProperties ไม่ได้ถูกตั้งค่า)วัสดุเริ่มต้น Plastic มีเทกเจอร์เบามากในขณะที่วัสดุ SmoothPlastic ไม่มีเทกเจอร์เลยเทกเจอร์วัสดุบางอย่างเช่น DiamondPlate และ Granite มีเทกเจอร์ที่เห็นได้ชัดเจนมากเทกเจอร์ของแต่ละวัสดุสะท้อนแสงแดดแตกต่างกันไป โดยเฉพาะอย่างยิ่ง Foil
การตั้งค่าคุณสมบัตินี้จากนั้นเปิดใช้งาน CustomPhysicalProperties จะใช้คุณสมบัติทางกายภาพเริ่มต้นของวัสดุตัวอย่างเช่น DiamondPlate เป็นวัสดุที่หนาแน่นมากในขณะที่ Wood เป็นวัสดุที่เบามากความหนาแน่นของชิ้นส่วนจะกำหนดว่าจะลอยในน้ําในพื้นที่หรือไม่
การเปลี่ยนแปลงวัสดุ Glass เปลี่ยนพฤติกรรมการแสดงผลในกราฟิกปานกลางโดยใช้ความสะท้อนแสงเล็กน้อย (คล้ายกับ Reflectance ) และการเปลี่ยนแปลงมุมมองผลกระทบเด่นชัดบนชิ้นส่วนรูปทรงกลมชิ้นครึ่งโปร่งใสด้านหลัง Glass ชิ้นไม่สามารถมองเห็นได้
MaterialVariant
ระบบค้นหาตัวอย่าง MaterialVariant ด้วยชื่อและประเภทที่ระบุ MaterialVariant และ Material อินสแตนซ์MaterialVariant สำเร็จ มันจะใช้ตัวอย่างนั้นเพื่อแทนที่วัสดุเริ่มต้นวัสดุเริ่มต้นอาจเป็นวัสดุที่ติดตั้งไว้หรือการยกเลิก MaterialVariant ที่ระบุไว้ใน MaterialService
Orientation
คุณสมบัติ Orientation อธิบายการหมุนส่วนในองศารอบ X , Y และ Z แกนโดยใช้ Vector3การหมุนจะถูกใช้ในลำดับ Y X Z นี้แตกต่างจากมุม Euler ที่เหมาะสมและเป็นมุม Tait-Bryan ซึ่งอธิบาย yaw , pitch และ roll ยังคุ้มค่าที่จะสังเกตว่าคุณสมบัตินี้แตกต่างจากคอนสตรัคเตอร์ CFrame.Angles() ซึ่งใช้การหมุนในลำดับที่แตกต่างกัน ( Z > Y > X )เพื่อการควบคุมที่ดีกว่าในการหมุนชิ้นส่วนมันเป็นที่แนะนำว่า CFrame ควรตั้งค่าแทน
เมื่อกำหนดค่าสมบัตินี้ คุณสมบัติใดๆ Welds หรือ Motor6Ds ที่เชื่อมต่อกับส่วนนี้จะมีค่า C0 หรือ C1 ที่ตรงกันอัปเดตเพื่อให้ส่วนสามารถเคลื่อนที่ได้เมื่อเชื่อมกับส่วนอื่นๆ ที่มันเชื่อมต่อWeldConstraints จะถูกปิดใช้งานชั่วคราวและเปิดใช้งานใหม่อีกครั้งในระหว่างการย้าย
ตัวอย่างโค้ด
ตัวอย่างโค้ดนี้หมุนชิ้นส่วนอย่างต่อเนื่องบนแกน Y
local part = script.Parent
local INCREMENT = 360 / 20
-- หมุนชิ้นส่วนต่อเนื่อง
while true do
for degrees = 0, 360, INCREMENT do
-- ตั้งค่าเฉพาะการหมุนแกน Y
part.Rotation = Vector3.new(0, degrees, 0)
-- วิธีที่ดีกว่าในการทำเช่นนี้คือการตั้งค่า CFrame
--ส่วน.CFrame = CFrame.new(ส่วน.Position) * CFrame.Angles(0, คณิตศาสตร์.rad(องศา), 0)
task.wait()
end
end
PivotOffset
คุณสมบัตินี้ระบุค่าออฟเซ็ตของจุดหมุนของชิ้นส่วนจาก CFrame ของมันซึ่งเป็น BasePart:GetPivot() เท่ากับ BasePart.CFrame คูณด้วย BasePart.PivotOffset
สะดวกสำหรับการตั้งค่าจุดศูนย์กลางไปยังตำแหน่งในพื้นที่ ท้องถิ่น แต่การตั้งค่าจุดศูนย์กลางของชิ้นส่วนไปยังตำแหน่งในพื้นที่ โลก สามารถทำได้ดังนี้:
local Workspace = game:GetService("Workspace")local part = Workspace.BluePartlocal desiredPivotCFrameInWorldSpace = CFrame.new(0, 10, 0)part.PivotOffset = part.CFrame:ToObjectSpace(desiredPivotCFrameInWorldSpace)
ตัวอย่างโค้ด
This code sample shows a custom function for resetting the pivot of a model back to the center of that model's bounding box.
local function resetPivot(model)
local boundsCFrame = model:GetBoundingBox()
if model.PrimaryPart then
model.PrimaryPart.PivotOffset = model.PrimaryPart.CFrame:ToObjectSpace(boundsCFrame)
else
model.WorldPivot = boundsCFrame
end
end
resetPivot(script.Parent)
ตัวอย่างโค้ดนี้สร้างนาฬิกาที่จุดเริ่มต้นด้วยมือชั่วโมง วินาที และชั่วโมง และทำให้มันติดขัดโดยแสดงเวลาท้องถิ่น
local function createHand(length, width, yOffset)
local part = Instance.new("Part")
part.Size = Vector3.new(width, 0.1, length)
part.Material = Enum.Material.Neon
part.PivotOffset = CFrame.new(0, -(yOffset + 0.1), length / 2)
part.Anchored = true
part.Parent = workspace
return part
end
local function positionHand(hand, fraction)
hand:PivotTo(CFrame.fromEulerAnglesXYZ(0, -fraction * 2 * math.pi, 0))
end
-- สร้างการโทร
for i = 0, 11 do
local dialPart = Instance.new("Part")
dialPart.Size = Vector3.new(0.2, 0.2, 1)
dialPart.TopSurface = Enum.SurfaceType.Smooth
if i == 0 then
dialPart.Size = Vector3.new(0.2, 0.2, 2)
dialPart.Color = Color3.new(1, 0, 0)
end
dialPart.PivotOffset = CFrame.new(0, -0.1, 10.5)
dialPart.Anchored = true
dialPart:PivotTo(CFrame.fromEulerAnglesXYZ(0, (i / 12) * 2 * math.pi, 0))
dialPart.Parent = workspace
end
-- สร้างมือ
local hourHand = createHand(7, 1, 0)
local minuteHand = createHand(10, 0.6, 0.1)
local secondHand = createHand(11, 0.2, 0.2)
-- ดําเนินการนาฬิกา
while true do
local components = os.date("*t")
positionHand(hourHand, (components.hour + components.min / 60) / 12)
positionHand(minuteHand, (components.min + components.sec / 60) / 60)
positionHand(secondHand, components.sec / 60)
task.wait()
end
Position
คุณสมบัติ Position อธิบายพิกัดของส่วนโดยใช้ Vector3 เพื่อใช้มันสะท้อนตำแหน่งของส่วน CFrame แต่ยังสามารถตั้งค่าได้
เมื่อกำหนดค่าสมบัตินี้ คุณสมบัติใดๆ Welds หรือ Motor6Ds ที่เชื่อมต่อกับส่วนนี้จะมีค่า C0 หรือ C1 ที่ตรงกันอัปเดตเพื่อให้ส่วนสามารถเคลื่อนที่ได้เมื่อเชื่อมกับส่วนอื่นๆ ที่มันเชื่อมต่อWeldConstraints จะถูกปิดใช้งานชั่วคราวและเปิดใช้งานใหม่อีกครั้งในระหว่างการย้าย
ReceiveAge
บ่งบอกเวลาในวินาทีตั้งแต่ฟิสิกส์ของชิ้นส่วนได้รับการปรับปรุงล่าสุดบนไคลเอนต์ท้องถิ่นหรือเซิร์ฟเวอร์ค่านี้จะเป็น 0 เมื่อชิ้นส่วนไม่มีฟิสิกส์ ( Anchored คือ true )
Reflectance
คุณสมบัติ Reflectance กำหนดจำนวนส่วนที่สะท้อนท้องฟ้าค่าของ 0 ทั้งหมดและค่าของ 1 บ่งบอกว่าส่วนนั้นควรสะท้อนอย่างเต็มที่
ความสะท้อนไม่ได้รับผลกระทบจาก Transparency เว้นแต่ชิ้นส่วนจะโปร่งใสอย่างสมบูรณ์ในกรณีนั้นความสะท้อนจะไม่แสดงเลยความสะท้อนแสงอาจถูกเพิกเฉยหรือไม่อาจถูกเพิกเฉยขึ้นอยู่กับ Material ของส่วน
ResizeIncrement
คุณสมบัติ ResizeIncrement เป็นคุณสมบัติอ่านเฉพาะที่อธิบายการเปลี่ยนแปลงขนาดเล็กสุดที่อนุญาตโดยวิธี Resize()มันแตกต่างกันระหว่างการใช้งานของคลาส abstract BasePart อินสแตนซ์Part มีตั้งค่านี้ไว้ที่ 1 ในขณะที่ TrussPart มีตั้งค่านี้ไว้ที่ 2 เนื่องจากส่วนตรุสแต่ละส่วนมีขนาด 2×2×2
ResizeableFaces
คุณสมบัติ ResizeableFaces ใช้วัตถุ Faces เพื่ออธิบายใบหน้าที่แตกต่างกันซึ่งชิ้นส่วนสามารถปรับขนาดได้สำหรับการใช้งานส่วนใหญ่ของ BasePart , เช่น Part และ WedgePart , คุณสมบัตินี้รวมถึงใบหน้าทั้งหมดอย่างไรก็ตาม จะตั้งค่า ให้เป็นสองใบหน้าเท่านั้นเนื่องจากชิ้นส่วนประเภทนั้นต้องมีมิติความยาวสอง เท่า
คุณสมบัตินี้มักใช้กับเครื่องมือสำหรับสร้างและปรับแต่งชิ้นส่วนและมีการใช้งานน้อยนอกเหนือจากบริบทนั้นคลาส Handles ซึ่งมีคุณสมบัติ Handles.Faces สามารถใช้ร่วมกับคุณสมบัตินี้เพื่อแสดงเฉพาะจัดการบนใบหน้าที่สามารถปรับขนาดได้บนชิ้นส่วน
ตัวอย่างโค้ด
This code sample creates a Handles object and shows how to set the Faces property of the object. It also references ResizeableFaces of a part. Try placing this script in multiple kinds of parts to see how ResizeableFaces varies.
-- Put this Script in several kinds of BasePart, like
-- Part, TrussPart, WedgePart, CornerWedgePart, etc.
local part = script.Parent
-- Create a handles object for this part
local handles = Instance.new("Handles")
handles.Adornee = part
handles.Parent = part
-- Manually specify the faces applicable for this handle
handles.Faces = Faces.new(Enum.NormalId.Top, Enum.NormalId.Front, Enum.NormalId.Left)
-- Alternatively, use the faces on which the part can be resized.
-- If part is a TrussPart with only two Size dimensions
-- of length 2, then ResizeableFaces will only have two
-- enabled faces. For other parts, all faces will be enabled.
handles.Faces = part.ResizeableFaces
RightSurface
คุณสมบัติ RightSurface กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางบวก X ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
RootPriority
คุณสมบัตินี้เป็นจํานวนเต็มระหว่าง -127 และ 127 ที่มีลําดับความสําคัญสูงกว่ากฎอื่น ๆ ทั้งหมดสําหรับการจัดเรียงส่วนรากเมื่อพิจารณาชิ้นส่วนหลายชิ้นที่ไม่ใช่ และมีมูลค่าเดียวกัน ชิ้นที่มีค่าสูงกว่าจะได้รับความสำคัญมากกว่าชิ้นที่มีค่าต่ำกว่า
คุณสามารถใช้คุณสมบัตินี้เพื่อควบคุมส่วนใดของการประกอบที่เป็นส่วนรากและรักษาส่วนรากให้มีความเสถียรหากมีการเปลี่ยนแปลงขนาด
ดูเพิ่มเติม ชิ้นส่วนรวม บทความที่อธิบายสิ่งที่เป็นส่วนรากและวิธีการใช้งาน
Rotation
การหมุนของชิ้นส่วนในองศาสำหรับสามแกน
เมื่อกำหนดค่าสมบัตินี้ คุณสมบัติใดๆ Welds หรือ Motor6Ds ที่เชื่อมต่อกับส่วนนี้จะมีค่า C0 หรือ C1 ที่ตรงกันอัปเดตเพื่อให้ส่วนสามารถเคลื่อนที่ได้เมื่อเชื่อมกับส่วนอื่นๆ ที่มันเชื่อมต่อWeldConstraints จะถูกปิดใช้งานชั่วคราวและเปิดใช้งานใหม่อีกครั้งในระหว่างการย้าย
Size
คุณสมบัติของชิ้นส่วน Size กำหนดขนาดมุมมองของมัน **** ในขณะที่ ExtentsSize แทนที่ขนาดจริงที่ใช้โดยเครื่องกลศาสตร์ เช่นใน การตรวจจับการชนมิติแต่ละมิติ (ความยาว ความกว้าง และความสูง) สามารถต่ำเป็น 0.001 และสูงถึง 2048ขนาดมิติด้านล่าง จะถูกแสดงเป็นภาพเหมือนกับว่าขนาดมิติของชิ้นส่วนเป็น
ส่วนหนึ่ง Size ถูกใช้ในหลายวิธีเพิ่มเติม:
- เพื่อมีอิทธิพลต่อมวลที่กำหนดโดย GetMass()
- โดย ParticleEmitter เพื่อกำหนดพื้นที่ที่อนุภาคถูกสร้างขึ้น
- โดย BlockMesh เพื่อกําหนดส่วนหนึ่งของปริซึมสี่เหลี่ยมที่เรนเดอร์ได้รับบางส่วน
- โดย SpecialMesh สำหรับบาง MeshTypes เพื่อกำหนดขนาดของเมชที่เรนเดอร์ได้
- โดย SurfaceLight เพื่อกำหนดพื้นที่ที่จะส่องแสง
ตัวอย่างโค้ด
This code sample constructs a pyramid by stacking parts that get progressively smaller. It also colors the parts so they blend between a start color and end color.
local TOWER_BASE_SIZE = 30
local position = Vector3.new(50, 50, 50)
local hue = math.random()
local color0 = Color3.fromHSV(hue, 1, 1)
local color1 = Color3.fromHSV((hue + 0.35) % 1, 1, 1)
local model = Instance.new("Model")
model.Name = "Tower"
for i = TOWER_BASE_SIZE, 1, -2 do
local part = Instance.new("Part")
part.Size = Vector3.new(i, 2, i)
part.Position = position
part.Anchored = true
part.Parent = model
-- Tween from color0 and color1
local perc = i / TOWER_BASE_SIZE
part.Color = Color3.new(
color0.R * perc + color1.R * (1 - perc),
color0.G * perc + color1.G * (1 - perc),
color0.B * perc + color1.B * (1 - perc)
)
position = position + Vector3.new(0, part.Size.Y, 0)
end
model.Parent = workspace
TopSurface
คุณสมบัติ TopSurface กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางบวก Y ของชิ้นส่วนเมื่อใบหน้าของส่วนสองส่วนถูกวางไว้ข้างๆ กัน พวกเขาอาจสร้างช่องว่างระหว่างพวกเขา
Transparency
คุณสมบัติ Transparency ควบคุมการมองเห็นของส่วนบนเครื่องชั่ง 0 ถึง 1 โดยที่ 0 เป็นที่มองเห็นอย่างสมบูรณ์ (ทึบ) และ 1 เป็นที่มองไม่เห็นอย่างสมบูรณ์ (ทั้งหมด)
ในขณะที่ชิ้นส่วนโปร่งใสเต็มรูปแบบไม่ถูกแสดงออกเลย การดำเนินการ
เมื่อชิ้นส่วนโปร่งใสซ้อนทับกัน คำสั่งแรนเดอร์อาจทำงานไม่สามารถคาดการณ์ได้ ดังนั้นคุณควรหลีกเลี่ยงชิ้นส่วนครึ่งโปร่งใสจากการซ้อนทับ
ดูเพิ่มเติม LocalTransparencyModifier เป็นตัวคูณไปยัง Transparency ที่มองเห็นได้เฉพาะกับไคลเอนต์ท้องถิ่นเท่านั้น
ตัวอย่างโค้ด
This code sample shows how a part can fade away when touched by a Humanoid then reappear a moment after to create a passable door.
-- Paste into a Script inside a tall part
local part = script.Parent
local OPEN_TIME = 1
-- Can the door be opened at the moment?
local debounce = false
local function open()
part.CanCollide = false
part.Transparency = 0.7
part.BrickColor = BrickColor.new("Black")
end
local function close()
part.CanCollide = true
part.Transparency = 0
part.BrickColor = BrickColor.new("Bright blue")
end
local function onTouch(otherPart)
-- If the door was already open, do nothing
if debounce then
print("D")
return
end
-- Check if touched by a Humanoid
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if not human then
print("not human")
return
end
-- Perform the door opening sequence
debounce = true
open()
task.wait(OPEN_TIME)
close()
debounce = false
end
part.Touched:Connect(onTouch)
close()
วิธีการ
AngularAccelerationToTorque
พารามิเตอร์
ส่งค่ากลับ
ApplyAngularImpulse
ใช้ช่วงแรงแบบเฉียบพลันกับการประกอบชิ้นส่วนนี้ทําให้การประกอบหมุน
ความเร็วในมุมที่ได้จากการชนกระแทกขึ้นอยู่กับ mass ของการประกอบดังนั้นจึงจำเป็นต้องมีแรงกระตุ้นสูงขึ้นเพื่อย้ายชิ้นส่วนขนาดใหญ่มากขึ้นแรงผลักดันมีประโยชน์สำหรับกรณีที่คุณต้องการให้แรงถูกใช้ทันที เช่น การระเบิดหรือการชนกัน
หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล
พารามิเตอร์
เวกเตอร์แรงกระตุกแบบมุมที่จะใช้กับการประกอบ
ส่งค่ากลับ
ApplyImpulse
ฟังก์ชันนี้ใช้แรงกระแทกทันทีกับการประกอบชิ้นส่วนนี้
แรงถูกใช้ที่การประกอบ center of mass ดังนั้นการเคลื่อนไหวที่เกิดขึ้นจะเป็นเชิงเส้นเท่านั้น
ความเร็วที่ได้จากช่วงเวลาสั้นๆ ขึ้นอยู่กับ mass ของการประกอบดังนั้นจึงจำเป็นต้องมีแรงกระตุ้นสูงขึ้นเพื่อย้ายชิ้นส่วนขนาดใหญ่มากขึ้นแรงผลักดันมีประโยชน์สำหรับกรณีที่คุณต้องการให้แรงถูกใช้ทันที เช่น การระเบิดหรือการชนกัน
หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล
พารามิเตอร์
เวกเตอร์แรงกระตุกเชิงเส้นที่จะใช้กับการประกอบ
ส่งค่ากลับ
ApplyImpulseAtPosition
ฟังก์ชันนี้ใช้แรงกระแทกทันทีกับการประกอบชิ้นส่วนนี้ในตําแหน่งที่กำหนดในพื้นที่โลก
หากตำแหน่งไม่อยู่ที่การประกอบ center of mass แรงกระตุกจะทําให้เกิดการเคลื่อนที่ในแนวและการหมุน
ความเร็วที่ได้จากช่วงเวลาสั้นๆ ขึ้นอยู่กับ mass ของการประกอบดังนั้นจึงจำเป็นต้องมีแรงกระตุ้นสูงขึ้นเพื่อย้ายชิ้นส่วนขนาดใหญ่มากขึ้นช่วงกระตุ้นมีประโยชน์สำหรับกรณีที่นักพัฒนาต้องการใช้แรงในทันที เช่น การระเบิดหรือการชนกัน
หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล
พารามิเตอร์
เวกเตอร์แรงกระตุ้นที่จะใช้กับการประกอบ
ตำแหน่งในพื้นที่โลกเพื่อใช้แรงกระตุ้น
ส่งค่ากลับ
CanCollideWith
ส่งคืนว่าชิ้นส่วนสามารถชนกันได้หรือไม่ฟังก์ชันนี้พิจารณากลุ่มการชนกันของส่วนทั้งสองฟังก์ชันนี้จะผิดพลาดหากส่วนที่ระบุไม่ใช่ส่วนฐาน
พารามิเตอร์
ส่วนที่ระบุถูกตรวจสอบเพื่อความชนกันได้
ส่งค่ากลับ
ว่าชิ้นส่วนสามารถชนกันได้หรือไม่
CanSetNetworkOwnership
ฟังก์ชัน CanSetNetworkOwnership ตรวจสอบว่าคุณสามารถตั้งค่าการเป็นเจ้าของเครือข่ายส่วนหนึ่งได้หรือไม่
ค่าการคืนฟังก์ชันตรวจสอบว่าคุณสามารถโทรไปที่ BasePart:SetNetworkOwner() หรือ BasePart:SetNetworkOwnershipAuto() โดยไม่พบข้อผิดพลาดหรือไม่มันจะส่งคืนค่าจริงหากคุณสามารถแก้ไข/อ่านการเป็นเจ้าของเครือข่ายได้หรือไม่ หรือส่งคืนค่าเท็จและเหตุผลที่คุณไม่สามารถทำได้เป็นข้อความ
ส่งค่ากลับ
ว่าคุณสามารถแก้ไขหรืออ่านเจ้าของเครือข่ายและเหตุผลได้หรือไม่
ตัวอย่างโค้ด
ตัวอย่างนี้ตรวจสอบว่าเครือข่ายเป็นเจ้าของส่วนแรก BasePart ที่ชื่อว่า ส่วน ใน Workspace สามารถตั้งค่าได้หรือไม่
local part = workspace:FindFirstChild("Part")
if part and part:IsA("BasePart") then
local canSet, errorReason = part:CanSetNetworkOwnership()
if canSet then
print(part:GetFullName() .. "'s Network Ownership can be changed!")
else
warn("Cannot change the Network Ownership of " .. part:GetFullName() .. " because: " .. errorReason)
end
end
GetConnectedParts
คืนตารางชิ้นส่วนที่เชื่อมโยงกับวัตถุโดยใช้ข้อต่อแข็งใดๆ
หาก recursive เป็นจริงฟังก์ชันนี้จะคืนชิ้นส่วนทั้งหมดในการประกอบที่เชื่อมต่อกับ BasePart อย่างเคร่งครัด
ข้อต่อแข็ง
เมื่อขั้วต่อเชื่อมต่อส่วนสองด้วยกัน (Part0 → Part1) ขั้วต่อจะเป็น แข็ง หากฟิสิกส์ของ Part1 ถูกล็อคอย่างสมบูรณ์โดย Part0นี้ใช้กับประเภทร่วมต่อไปนี้เท่านั้น:
พารามิเตอร์
ส่งค่ากลับ
GetJoints
คืนข้อต่อหรือข้อจำกัดทั้งหมดที่เชื่อมโยงกับส่วนนี้
ส่งค่ากลับ
ชุดของข้อต่อหรือข้อจํากัดทั้งหมดที่เชื่อมต่อกับชิ้นส่วน
GetMass
รับมวล ส่งคืนค่าของคุณสมบัติอ่านได้เท่านั้น Mass
ฟังก์ชันนี้มีอายุก่อนที่จะเป็นคุณสมบัติมวล ยังคงได้รับการสนับสนุนสำหรับการย้อนกลับไป; คุณควรใช้คุณสมบัติมวลโดยตรง
ส่งค่ากลับ
มวลของชิ้นส่วน
ตัวอย่างโค้ด
ตัวอย่างนี้สร้างส่วนใหม่ myPart ในพื้นที่ทำงานของเกมด้วยขนาด 4x6x4 สตัด ส่วนยังถูกยึดด้วย
จากนั้น myMass จะถูกตั้งเป็นเท่ากับมวลของส่วนใหม่ มวลของส่วนจะถูกพิมพ์ที่ด้านท้ายของคำสั่งพิมพ์:
มวลส่วนของฉันคือ...
local myPart = Instance.new("Part")
myPart.Size = Vector3.new(4, 6, 4)
myPart.Anchored = true
myPart.Parent = workspace
local myMass = myPart:GetMass()
print("My part's mass is " .. myMass)
GetNetworkOwner
ส่งคืนผู้เล่นปัจจุบันที่เป็นเจ้าของเครือข่ายส่วนนี้หรือ nil ในกรณีของเซิร์ฟเวอร์
ส่งค่ากลับ
ผู้เล่นปัจจุบันที่เป็นเจ้าของเครือข่ายส่วนนี้หรือ nil ในกรณีของเซิร์ฟเวอร์
GetNetworkOwnershipAuto
ส่งคืนค่าจริงหากเครื่องเกมตัดสินเจ้าของเครือข่ายสำหรับส่วนนี้โดยอัตโนมัติ
ส่งค่ากลับ
ว่าเครื่องเกมตัดสินใจเจ้าของเครือข่ายอัตโนมัติสำหรับส่วนนี้หรือไม่
GetNoCollisionConstraints
ส่งค่ากลับ
GetRootPart
คืนส่วนฐานของการประกอบเมื่อย้ายชิ้นส่วนรวมโดยใช้ CFrameเป็นสิ่งสำคัญที่ต้องย้ายส่วนฐานนี้ (สิ่งนี้จะย้ายส่วนอื่นๆ ทั้งหมดที่เชื่อมโยงกับมันตามลำดับ)ข้อมูลเพิ่มเติมมีอยู่ในบทความ กลุ่มส่วนประกอบ
ฟังก์ชันนี้มีอายุก่อนที่จะเป็นคุณสมบัติ AssemblyRootPart มันยังคงได้รับการสนับสนุนสำหรับการย้อนกลับไปใช้งานได้ แต่คุณควรใช้ AssemblyRootPart โดยตรง
ส่งค่ากลับ
ส่วนฐานของการประกอบ (คอลเลกชันของชิ้นส่วนที่เชื่อมต่อกัน)
GetTouchingParts
คืนตารางของชิ้นส่วนทั้งหมดที่มีการโต้ตอบทางกายภาพกับชิ้นส่วนนี้หากส่วนเองมีการตั้งค่า CanCollide เป็น false แล้วฟังก์ชันนี้จะคืนตารางว่างเปล่า เว้นแต่ส่วนมีวัตถุ TouchInterest ที่เป็นพ่อของมัน (หมายถึงบางอย่างถูกเชื่อมโยงกับอีเวนต์สัมผัสของมัน)ชิ้นส่วนที่อยู่ติดกัน แต่ไม่ซับซ้อนกันไม่ถือว่าสัมผัสฟังก์ชันนี้มีอายุก่อนหน้าฟังก์ชัน WorldRoot:GetPartsInPart() ซึ่งให้ความยืดหยุ่นมากขึ้นและหลีกเลี่ยงกฎพิเศษ TouchInterest ที่อธิบายไว้ข้างต้นใช้ WorldRoot:GetPartsInPart() แทน
ส่งค่ากลับ
ตารางของทุกส่วนที่ซ้อนทับและสามารถชนกับส่วนนี้ได้
GetVelocityAtPosition
คืนความเร็วเชิงเส้นของการประกอบชิ้นส่วนในตำแหน่งที่กำหนดเมื่อเทียบกับชิ้นส่วนนี้สามารถใช้เพื่อระบุความเร็วเชิงเส้นของชิ้นส่วนในการประกอบที่ไม่ใช่ชิ้นส่วนรากหากการประกอบไม่มีความเร็วเฉพาะทาง ความเร็วเชิงเส้นจะเหมือนกันเสมอสำหรับทุกตําแหน่ง
พารามิเตอร์
ส่งค่ากลับ
IsGrounded
ส่งคืนจริงหากวัตถุเชื่อมต่อกับส่วนที่จะถือไว้ในตําแหน่ง (เช่นส่วน Anchored ) มิฉะนั้นจะส่งคืนเป็นเท็จในการประกอบที่มีส่วน Anchored ส่วนอื่น ๆ ทั้งหมดจะถูกกระจาย
ส่งค่ากลับ
ว่าวัตถุจะเชื่อมต่อกับส่วนที่จะรักษาไว้ที่เดิมหรือไม่
Resize
เปลี่ยนขนาดของวัตถุเช่นเดียวกับการใช้เครื่องมือปรับขนาดของ Studio
พารามิเตอร์
ด้านที่จะปรับขนาดใหม่
เท่าใดที่จะเติบโต/หดบนด้านที่ระบุ
ส่งค่ากลับ
ว่าส่วนจะถูกปรับขนาดหรือไม่
SetNetworkOwner
ตั้งผู้เล่นที่กำหนดเป็นเจ้าของเครือข่ายสำหรับส่วนที่เชื่อมต่อทั้งหมดและส่วนนี้เมื่อ playerInstance มี nil เซิร์ฟเวอร์จะเป็นเจ้าของแทนผู้เล่น
พารามิเตอร์
ผู้เล่นได้รับสิทธิ์เป็นเจ้าของเครือข่ายส่วนหนึ่ง
ส่งค่ากลับ
SetNetworkOwnershipAuto
ให้เครื่องเกมตัดสินได้อย่างไดนามิกว่าใครจะจัดการกับฟิสิกส์ของชิ้นส่วน (หนึ่งในไคลเอนต์หรือเซิร์ฟเวอร์)
ส่งค่ากลับ
TorqueToAngularAcceleration
พารามิเตอร์
ส่งค่ากลับ
IntersectAsync
สร้างใหม่ IntersectOperation จากรูปทรงที่ซ้อนทับกันของชิ้นส่วนและชิ้นส่วนอื่นๆ ในรายการที่กำหนดสนับสนุนเฉพาะ Parts เท่านั้น ไม่ใช่ Terrain หรือ MeshPartsคล้ายกับ Clone() วัตถุที่ส่งคืนไม่มีตั้งค่า Parent
คุณสมบัติต่อไปนี้จากส่วนที่เรียกใช้ถูกประยุกต์ให้กับผลลัพธ์ IntersectOperation :
ในการเปรียบเทียบภาพต่อไปนี้ IntersectAsync() จะเรียกใช้บนบล็อกสีม่วงโดยใช้ตารางที่มีบล็อกสีฟ้าผลลัพธ์ IntersectOperation จะแยกออกเป็นรูปร่างของภูมิภาคที่ซ้อนทับกันของทั้งสองส่วน

<figcaption>ชิ้นส่วนแยก</figcaption>

<figcaption>ผลลัพธ์ <code>Class.IntersectOperation</code></figcaption>
บันทึก
- ชิ้นส่วนเดิมยังคงอยู่อย่างสมบูรณ์หลังจากการดำเนินการบรรจบสำเร็จในกรณีส่วนใหญ่คุณควร Destroy() ทั้งหมดของชิ้นส่วนเดิมและเป็นพ่อของส่วนที่ส่งคืน IntersectOperation ไปยังสถานที่เดียวกับที่เรียก BasePart
- โดยค่าสีใบหน้าของการแยกตัวที่ได้รับจะถูกยืมมาจากคุณสมบัติ Color ของส่วนเดิมเพื่อเปลี่ยนทั้งหมดของจุดกบฏเป็นสีเฉพาะ ให้ตั้งค่าคุณสมบัติ UsePartColor ของมันเป็น true
- หากการดำเนินการบรรจบจะทำให้ได้ชิ้นส่วนที่มีมากกว่า 20,000 เหลี่ยม จะถูกเรียบเรียงให้เหลือเพียง 20,000 เหลี่ยม
พารามิเตอร์
วัตถุที่มีส่วนร่วมในจุดแยก
ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ IntersectOperation
ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation
ส่งค่ากลับ
ผลลัพธ์ IntersectOperation ด้วยชื่อเริ่มต้น สัมผัส .
SubtractAsync
สร้างใหม่ UnionOperation จากส่วนโดยลบเอกภาพที่ใช้โดยชิ้นส่วนในช่องที่กำหนดสนับสนุนเฉพาะ Parts เท่านั้น ไม่ใช่ Terrain หรือ MeshPartsคล้ายกับ Clone() วัตถุที่ส่งคืนไม่มีตั้งค่า Parent
โปรดทราบว่าสหภาพที่ได้รับจะไม่สามารถว่างเปล่าได้เนื่องจากการหักลบ หากการดำเนินการจะทำให้ภาพรวมว่างเปล่าอย่างสมบูรณ์ ก็จะล้มเหลว
ในการเปรียบเทียบภาพต่อไปนี้ SubtractAsync() จะเรียกใช้บนทรงกระบอกสีฟ้าโดยใช้ตารางที่มีบล็อกสีม่วงผลลัพธ์ UnionOperation จะแปลงเป็นรูปที่ลบเอกลักษณ์ของบล็อกจากทรงกระบอก

<figcaption>ชิ้นส่วนแยก</figcaption>

<figcaption>ผลลัพธ์ <code>Class.UnionOperation</code></figcaption>
พารามิเตอร์
วัตถุที่มีส่วนร่วมในการหักลบ
ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ UnionOperation
ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation
ส่งค่ากลับ
ผลลัพธ์ UnionOperation ด้วยชื่อเริ่มต้น Union .
ตัวอย่างโค้ด
ตัวอย่างนี้แสดงวิธีการหักส่วน (ส่วน) ออกจากอีก BasePart เพื่อสร้างลบ UnionOperation
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- ดำเนินการบวกลบ
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
UnionAsync
สร้างใหม่ UnionOperation จากส่วน, บวกกับรูปร่างที่ใช้โดยชิ้นส่วนในช่วงที่กำหนดสนับสนุนเฉพาะ Parts เท่านั้น ไม่ใช่ Terrain หรือ MeshPartsคล้ายกับ Clone() วัตถุที่ส่งคืนไม่มีตั้งค่า Parent
คุณสมบัติต่อไปนี้จากส่วนที่เรียกใช้ถูกประยุกต์ให้กับผลลัพธ์ UnionOperation :
ในการเปรียบเทียบภาพต่อไปนี้ UnionAsync() จะเรียกใช้บนบล็อกสีฟ้าโดยใช้ตารางที่มีทรงกระบอกสีม่วงผลลัพธ์ UnionOperation จะแยกออกเป็นรูปร่างของภูมิทัศน์รวมของทั้งสองส่วน

<figcaption>ชิ้นส่วนแยก</figcaption>

<figcaption>ผลลัพธ์ <code>Class.UnionOperation</code></figcaption>
บันทึก
- ชิ้นส่วนเดิมยังคงอยู่อย่างสมบูรณ์หลังจากการดำเนินการรวมที่ประสบความสำเร็จในกรณีส่วนใหญ่คุณควร Destroy() ทั้งหมดของชิ้นส่วนเดิมและเป็นพ่อของส่วนที่ส่งคืน UnionOperation ไปยังสถานที่เดียวกับที่เรียก BasePart
- โดยค่าเริ่มต้น สหภาพที่ได้รับจะเคารพคุณสมบัติ Color ของแต่ละส่วนเพื่อเปลี่ยนสหภาพทั้งหมดเป็นสีเฉพาะ ตั้งค่าคุณสมบัติ UsePartColor ของมันเป็น true
- หากการดำเนินการสหภาพจะทำให้ได้ชิ้นส่วนที่มีมากกว่า 20,000 เหลี่ยม จะถูกเรียบเรียงให้เหลือเพียง 20,000 เหลี่ยม
พารามิเตอร์
วัตถุที่มีส่วนร่วมในสหภาพกับส่วนที่เรียกใช้
ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ UnionOperation
ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation
ส่งค่ากลับ
ผลลัพธ์ UnionOperation ด้วยชื่อเริ่มต้น Union .
ตัวอย่างโค้ด
This example demonstrates how to combine the geometry of one BasePart with the geometry of other part(s) to form a UnionOperation.
local Workspace = game:GetService("Workspace")
local mainPart = script.Parent.PartA
local otherParts = { script.Parent.PartB, script.Parent.PartC }
-- Perform union operation
local success, newUnion = pcall(function()
return mainPart:UnionAsync(otherParts)
end)
-- If operation succeeds, position it at the same location and parent it to the workspace
if success and newUnion then
newUnion.Position = mainPart.Position
newUnion.Parent = Workspace
end
-- Destroy original parts which remain intact after operation
mainPart:Destroy()
for _, part in otherParts do
part:Destroy()
end
อีเวนต์
TouchEnded
ไฟเมื่อส่วนหยุดสัมผัสส่วนอื่นภายใต้เงื่อนไขที่คล้ายกับของ BasePart.Touched
อีเวนต์นี้ทำงานร่วมกับ Workspace.TouchesUseCollisionGroups เพื่อระบุว่า กลุ่มการชนกัน จะได้รับการยอมรับสำหรับการตรวจจับหรือไม่
พารามิเตอร์
ตัวอย่างโค้ด
This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
Touched
อีเวนต์ สัมผัส อินสแตนซ์หาก ส่วน A ชนกับ ส่วน B แล้ว PartA.Touched ไฟด้วย ส่วน B และ PartB.Touched ไฟด้วย ส่วน A อีเวนต์นี้จะยิงเฉพาะในผลของการเคลื่อนไหวทางกายภาพเท่านั้น ดังนั้นจะไม่ยิงหากคุณสมบัติ CFrame ถูกเปลี่ยนให้ส่วนหนึ่งซ้อนกับส่วนอื่นนี่ยังหมายความว่าอย่างน้อยหนึ่งในชิ้นส่วนที่เกี่ยวข้องจะต้อง ไม่ ไม่อยู่ในเวลาของการชนกัน
อีเวนต์นี้ทำงานร่วมกับ Workspace.TouchesUseCollisionGroups เพื่อระบุว่า กลุ่มการชนกัน จะได้รับการยอมรับสำหรับการตรวจจับหรือไม่
พารามิเตอร์
ส่วนอื่นที่มาสัมผัสกับส่วนที่กำหนดไว้
ตัวอย่างโค้ด
This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.
local part = script.Parent
local billboardGui = Instance.new("BillboardGui")
billboardGui.Size = UDim2.new(0, 200, 0, 50)
billboardGui.Adornee = part
billboardGui.AlwaysOnTop = true
billboardGui.Parent = part
local tl = Instance.new("TextLabel")
tl.Size = UDim2.new(1, 0, 1, 0)
tl.BackgroundTransparency = 1
tl.Parent = billboardGui
local numTouchingParts = 0
local function onTouch(otherPart)
print("Touch started: " .. otherPart.Name)
numTouchingParts = numTouchingParts + 1
tl.Text = numTouchingParts
end
local function onTouchEnded(otherPart)
print("Touch ended: " .. otherPart.Name)
numTouchingParts = numTouchingParts - 1
tl.Text = numTouchingParts
end
part.Touched:Connect(onTouch)
part.TouchEnded:Connect(onTouchEnded)
This code sample demonstrates how to connect the BasePart.Touched event of multiple parts in a Model to one function.
local model = script.Parent
local function onTouched(otherPart)
-- Ignore instances of the model coming in contact with itself
if otherPart:IsDescendantOf(model) then
return
end
print(model.Name .. " collided with " .. otherPart.Name)
end
for _, child in pairs(model:GetChildren()) do
if child:IsA("BasePart") then
child.Touched:Connect(onTouched)
end
end