BasePart

แสดงที่เลิกใช้งานแล้ว

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

ไม่สามารถสร้าง
ไม่สามารถเรียกดู

BasePart เป็นคลาสระดับสูงสำหรับวัตถุในโลกที่แสดงและจำลองทางกายภาพในขณะที่อยู่ใน Workspaceมีการใช้งานหลายอย่างของ BasePart , ที่พบบ่อยที่สุดคือ Part และ MeshPartอื่นๆ รวมถึง WedgePart , SpawnLocation และวัตถุโซลเดียว Terrainโดยทั่วไปเมื่อเอกสารอ้างถึง "ส่วน" ส่วนใหญ่ BasePart การดำเนินการจะทำงานและไม่เพียงแค่ Part

สำหรับข้อมูลเกี่ยวกับวิธีที่ BaseParts จะถูกจัดเป็นกลุ่มเป็นร่างแข็งจำลองดูได้ที่ ชิ้นส่วน

มีวัตถุที่แตกต่างกันมากมายที่โต้ตอบกับ BasePart (นอกเหนือจาก Terrain ) รวมถึง:

สรุป

คุณสมบัติ

  • อ่านพร้อมๆ กัน

    กำหนดว่าชิ้นส่วนเป็นอนันต์ตามฟิสิกส์หรือไม่

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ความเร็วในแนวมุมของการประกอบชิ้นส่วน

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ศูนย์กลางของมวลของการประกอบชิ้นส่วนในพื้นที่โลก

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ความเร็วเชิงเส้นของการประกอบชิ้นส่วน

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    มวลรวมของการประกอบชิ้นส่วน

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    การอ้างอิงถึงส่วนรากของการประกอบ

  • อ่านพร้อมๆ กัน

    กำหนดว่าชิ้นจะโต้ตอบกับการจำลองเสียงทางกายภาพหรือไม่ คล้ายกับ CastShadow สำหรับแสง

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านหลังของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านล่างของชิ้นส่วน

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    กำหนดสีของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กำหนดตำแหน่งและทิศทางของ BasePart ในโลก

  • อ่านพร้อมๆ กัน

    กำหนดว่าชิ้นส่วนจะชนกับชิ้นส่วนอื่นหรือไม่

  • อ่านพร้อมๆ กัน

    กำหนดว่าชิ้นส่วนจะถูกพิจารณาในระหว่างการดำเนินการค้นหาในพื้นที่หรือไม่

  • อ่านพร้อมๆ กัน

    กำหนดว่าจะมีการเรียกไฟ Touched และ TouchEnded กิจกรรมบนส่วนหรือไม่

  • อ่านพร้อมๆ กัน

    กำหนดว่าส่วนใดมีเงาหรือไม่

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายตำแหน่งของโลกที่ศูนย์กลางของมวลของชิ้นส่วนอยู่

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายชื่อกลุ่มการชนกันของชิ้นส่วน

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    กำหนดสีของชิ้นส่วน

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    บ่งชี้คุณสมบัติทางกายภาพปัจจุบันของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กำหนดคุณสมบัติทางกายภาพหลายอย่างของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    ใช้เพื่อเปิดใช้งานหรือปิดใช้งานแรงอากาศในชิ้นส่วนและชิ้นส่วนประกอบ

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    The CFrame ของระยะทางทางกายภาพของ BasePart .

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ขนาดทางกายภาพที่แท้จริงของ BasePart ตามที่เครื่องกลศาสตร์กำหนด

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านหน้าของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านซ้ายของชิ้นส่วน

  • ซ่อนอยู่
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    กำหนดตัวคูณสำหรับ BasePart.Transparency ที่มองเห็นได้เฉพาะกับไคลเอนต์ท้องถิ่นเท่านั้น

  • อ่านพร้อมๆ กัน

    กำหนดว่าส่วนใดสามารถเลือกได้ใน Studio

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายมวลของชิ้นส่วน ผลิตภัณฑ์ของความหนาแน่นและปริมาณ

  • อ่านพร้อมๆ กัน

    กำหนดว่าชิ้นส่วนมีส่วนร่วมในมวลหรือแรงเฉื่อยของร่างกายแข็งหรือไม่

  • อ่านพร้อมๆ กัน

    กำหนดเทกเจอร์และคุณสมบัติทางกายภาพเริ่มต้นของชิ้นส่วน

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    ชื่อของ MaterialVariant .

  • ซ่อนอยู่
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายการหมุนของชิ้นส่วนในโลก

  • อ่านพร้อมๆ กัน

    ระบุออฟเซ็ตของจุดศูนย์กลางของชิ้นส่วนจาก CFrame ของมัน

  • ซ่อนอยู่
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายตำแหน่งของชิ้นส่วนในโลก

  • ซ่อนอยู่
    อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    เวลาตั้งแต่อัปเดตฟิสิกส์ครั้งล่าสุด

  • อ่านพร้อมๆ กัน

    กำหนดจํานวนส่วนที่สะท้อนกล่องท้องฟ้าได้

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายการเปลี่ยนแปลงขนาดเล็กที่สุดที่อนุญาตโดยวิธี Resize()

  • อ่านอย่างเดียว
    ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    อธิบายใบหน้าที่ส่วนสามารถปรับขนาดได้

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านขวาของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กฎหลักในการกำหนดส่วนรากของการประกอบ

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    การหมุนของชิ้นส่วนในองศาสำหรับสามแกน

  • ไม่ซ้ำ
    อ่านพร้อมๆ กัน

    กำหนดขนาดของชิ้นส่วน (ความยาว ความกว้าง ความสูง)

  • อ่านพร้อมๆ กัน

    กำหนดประเภทพื้นผิวสำหรับด้านบนของชิ้นส่วน

  • อ่านพร้อมๆ กัน

    กำหนดจำนวนส่วนที่สามารถมองเห็นได้ผ่าน (ตรงกันข้ามของความทึบของส่วน)

คุณสมบัติรับทอดมาจากPVInstance
  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน
  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน

วิธีการ

  • AngularAccelerationToTorque(angAcceleration : Vector3,angVelocity : Vector3):Vector3
  • ใช้แรงกระตุกแบบมุมกับการประกอบ

  • ApplyImpulse(impulse : Vector3):()

    ใช้แรงกระตุ้นกับการประกอบที่การประกอบ center of mass .

  • ApplyImpulseAtPosition(impulse : Vector3,position : Vector3):()

    ใช้แรงกระตุ้นกับการประกอบในตำแหน่งที่กำหนด

  • เขียนพร้อมๆ กัน

    ส่งคืนว่าชิ้นส่วนสามารถชนกันได้หรือไม่

  • ตรวจสอบว่าคุณสามารถกำหนดสิทธิ์เจ้าของเครือข่ายส่วนได้หรือไม่

  • GetConnectedParts(recursive : boolean):Instances
    เขียนพร้อมๆ กัน

    คืนตารางชิ้นส่วนที่เชื่อมโยงกับวัตถุโดยใช้ข้อต่อแข็งใดๆ

  • GetJoints():Instances
    เขียนพร้อมๆ กัน

    คืนข้อต่อหรือข้อจำกัดทั้งหมดที่เชื่อมโยงกับส่วนนี้

  • เขียนพร้อมๆ กัน

    ส่งค่าของคุณสมบัติ Mass กลับ

  • เขียนพร้อมๆ กัน

    ส่งคืนผู้เล่นปัจจุบันที่เป็นเจ้าของเครือข่ายส่วนนี้หรือ nil ในกรณีของเซิร์ฟเวอร์

  • เขียนพร้อมๆ กัน

    ส่งคืนค่าจริงหากเครื่องเกมตัดสินเจ้าของเครือข่ายสำหรับส่วนนี้โดยอัตโนมัติ

  • เขียนพร้อมๆ กัน

    คืนส่วนฐานของการประกอบชิ้นส่วน

  • GetTouchingParts():Instances

    คืนตารางของชิ้นส่วนทั้งหมด BasePart.CanCollide ที่ถูกตัดกับชิ้นส่วนนี้

  • เขียนพร้อมๆ กัน

    คืนความเร็วเชิงเส้นของการประกอบชิ้นส่วนในตำแหน่งที่กำหนดเมื่อเทียบกับชิ้นส่วนนี้

  • เขียนพร้อมๆ กัน

    ส่งคืนจริงหากวัตถุเชื่อมต่อกับส่วนที่จะถือไว้ในตําแหน่ง (เช่นส่วน Anchored ) มิฉะนั้นจะส่งคืนเป็นเท็จ

  • Resize(normalId : Enum.NormalId,deltaAmount : number):boolean

    เปลี่ยนขนาดของวัตถุเช่นเดียวกับการใช้เครื่องมือปรับขนาดของ Studio

  • SetNetworkOwner(playerInstance : Player):()

    ตั้งผู้เล่นที่กำหนดเป็นเจ้าของเครือข่ายสำหรับส่วนที่เชื่อมต่อทั้งหมดและส่วนนี้

  • ให้เครื่องเกมตัดสินได้อย่างไดนามิกว่าใครจะจัดการกับฟิสิกส์ของชิ้นส่วน (หนึ่งในไคลเอนต์หรือเซิร์ฟเวอร์)

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

  • PivotTo(targetCFrame : CFrame):()

    เปลี่ยน 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).

Part Anchored Toggle

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มันอ้างอิงถึงส่วนพี่น้องที่เรียกว่า "ส่วนอื่น" เพื่อสาธิตตำแหน่งที่เป็นสัดส่วน

การตั้งค่า 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.

Fade 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().

PhysicsService:RegisterCollisionGroup

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.

Set CustomPhysicalProperties

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 นี้

ExtentsCFrame

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

The CFrame ของระยะทางทางกายภาพของ BasePart ที่แทนที่ศูนย์กลางทางกายภาพ

ExtentsSize

อ่านอย่างเดียว
ไม่ซ้ำ
อ่านพร้อมๆ กัน

ขนาดทางกายภาพที่แท้จริงของ 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.

Recursive Unlock

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

  • ปริมาณของชิ้นส่วนจะถูกกำหนดโดย Size และ Shape ซึ่งแตกต่างกันไปขึ้นอยู่กับประเภทของ BasePart ที่ใช้ เช่น WedgePart
  • ความหนาแน่นของชิ้นส่วนจะถูกกำหนดโดย Material หรือ CustomPhysicalProperties ถ้าระบุ

Massless

อ่านพร้อมๆ กัน

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

หากส่วนเป็นส่วนรากของตัวเองตาม AssemblyRootPart ส่วนนี้จะถูกเพิกเฉยสำหรับส่วนนั้นและจะยังคงมีส่วนร่วมในมวลและแรงเฉื่อยในการประกอบของมันเช่นเดียวกับส่วนปกติชิ้นส่วนที่ไม่มีมวลไม่ควรกลายเป็นส่วนรากของการประกอบไม่ว่าจะเป็นส่วนอื่นๆ ในการประกอบทั้งหมดหรือไม่

นี่อาจมีประโยชน์สำหรับสิ่งเช่นอุปกรณ์เสริมที่ไม่จำเป็นบนยานพาหนะที่คุณไม่ต้องการที่จะส่งผลต่อการจัดการของรถหรือเมชรวมที่ไม่มีมวลเชื่อมต่อกับเมชการชนที่เรียบง่าย

ดูเพิ่มเติม ชิ้นส่วนรวม บทความที่อธิบายสิ่งที่เป็นส่วนรากและวิธีการใช้งาน

อ่านพร้อมๆ กัน

คุณสมบัติ 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.BluePart
local 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.

Reset Pivot

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.

Resize Handles

-- 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 กำหนดขนาดมุมมองของมัน **** ในขณะที่ 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.

Pyramid Builder

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 กำหนดประเภทของพื้นที่ที่ใช้สำหรับทิศทางบวก 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.

Fade 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

พารามิเตอร์

angAcceleration: Vector3
ค่าเริ่มต้น: ""
angVelocity: Vector3
ค่าเริ่มต้น: "0, 0, 0"

ส่งค่ากลับ

ApplyAngularImpulse

()

ใช้ช่วงแรงแบบเฉียบพลันกับการประกอบชิ้นส่วนนี้ทําให้การประกอบหมุน

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

หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล

พารามิเตอร์

impulse: Vector3

เวกเตอร์แรงกระตุกแบบมุมที่จะใช้กับการประกอบ

ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

ApplyImpulse

()

ฟังก์ชันนี้ใช้แรงกระแทกทันทีกับการประกอบชิ้นส่วนนี้

แรงถูกใช้ที่การประกอบ center of mass ดังนั้นการเคลื่อนไหวที่เกิดขึ้นจะเป็นเชิงเส้นเท่านั้น

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

หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล

พารามิเตอร์

impulse: Vector3

เวกเตอร์แรงกระตุกเชิงเส้นที่จะใช้กับการประกอบ

ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

ApplyImpulseAtPosition

()

ฟังก์ชันนี้ใช้แรงกระแทกทันทีกับการประกอบชิ้นส่วนนี้ในตําแหน่งที่กำหนดในพื้นที่โลก

หากตำแหน่งไม่อยู่ที่การประกอบ center of mass แรงกระตุกจะทําให้เกิดการเคลื่อนที่ในแนวและการหมุน

ความเร็วที่ได้จากช่วงเวลาสั้นๆ ขึ้นอยู่กับ mass ของการประกอบดังนั้นจึงจำเป็นต้องมีแรงกระตุ้นสูงขึ้นเพื่อย้ายชิ้นส่วนขนาดใหญ่มากขึ้นช่วงกระตุ้นมีประโยชน์สำหรับกรณีที่นักพัฒนาต้องการใช้แรงในทันที เช่น การระเบิดหรือการชนกัน

หากส่วนเป็นเจ้าของ โดยเซิร์ฟเวอร์ ฟังก์ชันนี้ต้องเรียกจากเซิร์ฟเวอร์ (ไม่ใช่จาก หรือ ที่ตั้งค่าไว้เป็น )หากส่วนเป็นของลูกค้าผ่านการเป็นเจ้าของอัตโนมัติ ผ่านการเป็นเจ้าของ ฟังก์ชันนี้สามารถเรียกได้จากสคริปต์ลูกค้าหรือสคริปต์เซิร์ฟเวอร์; การเรียกสคริปต์ลูกค้าสำหรับส่วนที่เป็นเจ้าของของเซิร์ฟเวอร์จะไม่มีผล

พารามิเตอร์

impulse: Vector3

เวกเตอร์แรงกระตุ้นที่จะใช้กับการประกอบ

ค่าเริ่มต้น: ""
position: Vector3

ตำแหน่งในพื้นที่โลกเพื่อใช้แรงกระตุ้น

ค่าเริ่มต้น: ""

ส่งค่ากลับ

()

CanCollideWith

เขียนพร้อมๆ กัน

ส่งคืนว่าชิ้นส่วนสามารถชนกันได้หรือไม่ฟังก์ชันนี้พิจารณากลุ่มการชนกันของส่วนทั้งสองฟังก์ชันนี้จะผิดพลาดหากส่วนที่ระบุไม่ใช่ส่วนฐาน

พารามิเตอร์

part: BasePart

ส่วนที่ระบุถูกตรวจสอบเพื่อความชนกันได้

ค่าเริ่มต้น: ""

ส่งค่ากลับ

ว่าชิ้นส่วนสามารถชนกันได้หรือไม่

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

GetClosestPointOnSurface

พารามิเตอร์

position: Vector3
ค่าเริ่มต้น: ""

ส่งค่ากลับ

GetConnectedParts

Instances
เขียนพร้อมๆ กัน

คืนตารางชิ้นส่วนที่เชื่อมโยงกับวัตถุโดยใช้ข้อต่อแข็งใดๆ

หาก recursive เป็นจริงฟังก์ชันนี้จะคืนชิ้นส่วนทั้งหมดในการประกอบที่เชื่อมต่อกับ BasePart อย่างเคร่งครัด

ข้อต่อแข็ง

เมื่อขั้วต่อเชื่อมต่อส่วนสองด้วยกัน (Part0 → Part1) ขั้วต่อจะเป็น แข็ง หากฟิสิกส์ของ Part1 ถูกล็อคอย่างสมบูรณ์โดย Part0นี้ใช้กับประเภทร่วมต่อไปนี้เท่านั้น:

พารามิเตอร์

recursive: boolean

ตารางส่วนที่เชื่อมโยงกับวัตถุโดยใช้ประเภทใดก็ได้ของ joint

ค่าเริ่มต้น: false

ส่งค่ากลับ

Instances

GetJoints

Instances
เขียนพร้อมๆ กัน

คืนข้อต่อหรือข้อจำกัดทั้งหมดที่เชื่อมโยงกับส่วนนี้


ส่งค่ากลับ

Instances

ชุดของข้อต่อหรือข้อจํากัดทั้งหมดที่เชื่อมต่อกับชิ้นส่วน

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

Instances

ส่งค่ากลับ

Instances

GetRootPart

เขียนพร้อมๆ กัน

คืนส่วนฐานของการประกอบเมื่อย้ายชิ้นส่วนรวมโดยใช้ CFrameเป็นสิ่งสำคัญที่ต้องย้ายส่วนฐานนี้ (สิ่งนี้จะย้ายส่วนอื่นๆ ทั้งหมดที่เชื่อมโยงกับมันตามลำดับ)ข้อมูลเพิ่มเติมมีอยู่ในบทความ กลุ่มส่วนประกอบ

ฟังก์ชันนี้มีอายุก่อนที่จะเป็นคุณสมบัติ AssemblyRootPart มันยังคงได้รับการสนับสนุนสำหรับการย้อนกลับไปใช้งานได้ แต่คุณควรใช้ AssemblyRootPart โดยตรง


ส่งค่ากลับ

ส่วนฐานของการประกอบ (คอลเลกชันของชิ้นส่วนที่เชื่อมต่อกัน)

GetTouchingParts

Instances

คืนตารางของชิ้นส่วนทั้งหมดที่มีการโต้ตอบทางกายภาพกับชิ้นส่วนนี้หากส่วนเองมีการตั้งค่า CanCollide เป็น false แล้วฟังก์ชันนี้จะคืนตารางว่างเปล่า เว้นแต่ส่วนมีวัตถุ TouchInterest ที่เป็นพ่อของมัน (หมายถึงบางอย่างถูกเชื่อมโยงกับอีเวนต์สัมผัสของมัน)ชิ้นส่วนที่อยู่ติดกัน แต่ไม่ซับซ้อนกันไม่ถือว่าสัมผัสฟังก์ชันนี้มีอายุก่อนหน้าฟังก์ชัน WorldRoot:GetPartsInPart() ซึ่งให้ความยืดหยุ่นมากขึ้นและหลีกเลี่ยงกฎพิเศษ TouchInterest ที่อธิบายไว้ข้างต้นใช้ WorldRoot:GetPartsInPart() แทน


ส่งค่ากลับ

Instances

ตารางของทุกส่วนที่ซ้อนทับและสามารถชนกับส่วนนี้ได้

GetVelocityAtPosition

เขียนพร้อมๆ กัน

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

พารามิเตอร์

position: Vector3
ค่าเริ่มต้น: ""

ส่งค่ากลับ

IsGrounded

เขียนพร้อมๆ กัน

ส่งคืนจริงหากวัตถุเชื่อมต่อกับส่วนที่จะถือไว้ในตําแหน่ง (เช่นส่วน Anchored ) มิฉะนั้นจะส่งคืนเป็นเท็จในการประกอบที่มีส่วน Anchored ส่วนอื่น ๆ ทั้งหมดจะถูกกระจาย


ส่งค่ากลับ

ว่าวัตถุจะเชื่อมต่อกับส่วนที่จะรักษาไว้ที่เดิมหรือไม่

Resize

เปลี่ยนขนาดของวัตถุเช่นเดียวกับการใช้เครื่องมือปรับขนาดของ Studio

พารามิเตอร์

normalId: Enum.NormalId

ด้านที่จะปรับขนาดใหม่

ค่าเริ่มต้น: ""
deltaAmount: number

เท่าใดที่จะเติบโต/หดบนด้านที่ระบุ

ค่าเริ่มต้น: ""

ส่งค่ากลับ

ว่าส่วนจะถูกปรับขนาดหรือไม่

SetNetworkOwner

()

ตั้งผู้เล่นที่กำหนดเป็นเจ้าของเครือข่ายสำหรับส่วนที่เชื่อมต่อทั้งหมดและส่วนนี้เมื่อ playerInstance มี nil เซิร์ฟเวอร์จะเป็นเจ้าของแทนผู้เล่น

พารามิเตอร์

playerInstance: Player

ผู้เล่นได้รับสิทธิ์เป็นเจ้าของเครือข่ายส่วนหนึ่ง

ค่าเริ่มต้น: "nil"

ส่งค่ากลับ

()

SetNetworkOwnershipAuto

()

ให้เครื่องเกมตัดสินได้อย่างไดนามิกว่าใครจะจัดการกับฟิสิกส์ของชิ้นส่วน (หนึ่งในไคลเอนต์หรือเซิร์ฟเวอร์)


ส่งค่ากลับ

()

TorqueToAngularAcceleration

พารามิเตอร์

torque: Vector3
ค่าเริ่มต้น: ""
angVelocity: Vector3
ค่าเริ่มต้น: "0, 0, 0"

ส่งค่ากลับ

IntersectAsync

ผลตอบแทน

สร้างใหม่ IntersectOperation จากรูปทรงที่ซ้อนทับกันของชิ้นส่วนและชิ้นส่วนอื่นๆ ในรายการที่กำหนดสนับสนุนเฉพาะ Parts เท่านั้น ไม่ใช่ Terrain หรือ MeshPartsคล้ายกับ Clone() วัตถุที่ส่งคืนไม่มีตั้งค่า Parent

คุณสมบัติต่อไปนี้จากส่วนที่เรียกใช้ถูกประยุกต์ให้กับผลลัพธ์ IntersectOperation :

ในการเปรียบเทียบภาพต่อไปนี้ IntersectAsync() จะเรียกใช้บนบล็อกสีม่วงโดยใช้ตารางที่มีบล็อกสีฟ้าผลลัพธ์ IntersectOperation จะแยกออกเป็นรูปร่างของภูมิภาคที่ซ้อนทับกันของทั้งสองส่วน

Two block parts overlapping

<figcaption>ชิ้นส่วนแยก</figcaption>
Parts intersected into a new solid model

<figcaption>ผลลัพธ์ <code>Class.IntersectOperation</code></figcaption>

บันทึก

  • ชิ้นส่วนเดิมยังคงอยู่อย่างสมบูรณ์หลังจากการดำเนินการบรรจบสำเร็จในกรณีส่วนใหญ่คุณควร Destroy() ทั้งหมดของชิ้นส่วนเดิมและเป็นพ่อของส่วนที่ส่งคืน IntersectOperation ไปยังสถานที่เดียวกับที่เรียก BasePart
  • โดยค่าสีใบหน้าของการแยกตัวที่ได้รับจะถูกยืมมาจากคุณสมบัติ Color ของส่วนเดิมเพื่อเปลี่ยนทั้งหมดของจุดกบฏเป็นสีเฉพาะ ให้ตั้งค่าคุณสมบัติ UsePartColor ของมันเป็น true
  • หากการดำเนินการบรรจบจะทำให้ได้ชิ้นส่วนที่มีมากกว่า 20,000 เหลี่ยม จะถูกเรียบเรียงให้เหลือเพียง 20,000 เหลี่ยม

พารามิเตอร์

parts: Instances

วัตถุที่มีส่วนร่วมในจุดแยก

ค่าเริ่มต้น: ""
collisionfidelity: Enum.CollisionFidelity

ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ IntersectOperation

ค่าเริ่มต้น: "Default"
renderFidelity: Enum.RenderFidelity

ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation

ค่าเริ่มต้น: "Automatic"

ส่งค่ากลับ

ผลลัพธ์ IntersectOperation ด้วยชื่อเริ่มต้น สัมผัส .

SubtractAsync

ผลตอบแทน

สร้างใหม่ UnionOperation จากส่วนโดยลบเอกภาพที่ใช้โดยชิ้นส่วนในช่องที่กำหนดสนับสนุนเฉพาะ Parts เท่านั้น ไม่ใช่ Terrain หรือ MeshPartsคล้ายกับ Clone() วัตถุที่ส่งคืนไม่มีตั้งค่า Parent

โปรดทราบว่าสหภาพที่ได้รับจะไม่สามารถว่างเปล่าได้เนื่องจากการหักลบ หากการดำเนินการจะทำให้ภาพรวมว่างเปล่าอย่างสมบูรณ์ ก็จะล้มเหลว

ในการเปรียบเทียบภาพต่อไปนี้ SubtractAsync() จะเรียกใช้บนทรงกระบอกสีฟ้าโดยใช้ตารางที่มีบล็อกสีม่วงผลลัพธ์ UnionOperation จะแปลงเป็นรูปที่ลบเอกลักษณ์ของบล็อกจากทรงกระบอก

Longer block overlapping a cylinder

<figcaption>ชิ้นส่วนแยก</figcaption>
Block part subtracted from cylinder

<figcaption>ผลลัพธ์ <code>Class.UnionOperation</code></figcaption>

พารามิเตอร์

parts: Instances

วัตถุที่มีส่วนร่วมในการหักลบ

ค่าเริ่มต้น: ""
collisionfidelity: Enum.CollisionFidelity

ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ UnionOperation

ค่าเริ่มต้น: "Default"
renderFidelity: Enum.RenderFidelity

ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation

ค่าเริ่มต้น: "Automatic"

ส่งค่ากลับ

ผลลัพธ์ UnionOperation ด้วยชื่อเริ่มต้น Union .

ตัวอย่างโค้ด

ตัวอย่างนี้แสดงวิธีการหักส่วน (ส่วน) ออกจากอีก BasePart เพื่อสร้างลบ UnionOperation

ส่วนฐาน: ลบ Async()

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 จะแยกออกเป็นรูปร่างของภูมิทัศน์รวมของทั้งสองส่วน

Block and cylinder parts overlapping

<figcaption>ชิ้นส่วนแยก</figcaption>
Parts joined together into a single solid union

<figcaption>ผลลัพธ์ <code>Class.UnionOperation</code></figcaption>

บันทึก

  • ชิ้นส่วนเดิมยังคงอยู่อย่างสมบูรณ์หลังจากการดำเนินการรวมที่ประสบความสำเร็จในกรณีส่วนใหญ่คุณควร Destroy() ทั้งหมดของชิ้นส่วนเดิมและเป็นพ่อของส่วนที่ส่งคืน UnionOperation ไปยังสถานที่เดียวกับที่เรียก BasePart
  • โดยค่าเริ่มต้น สหภาพที่ได้รับจะเคารพคุณสมบัติ Color ของแต่ละส่วนเพื่อเปลี่ยนสหภาพทั้งหมดเป็นสีเฉพาะ ตั้งค่าคุณสมบัติ UsePartColor ของมันเป็น true
  • หากการดำเนินการสหภาพจะทำให้ได้ชิ้นส่วนที่มีมากกว่า 20,000 เหลี่ยม จะถูกเรียบเรียงให้เหลือเพียง 20,000 เหลี่ยม

พารามิเตอร์

parts: Instances

วัตถุที่มีส่วนร่วมในสหภาพกับส่วนที่เรียกใช้

ค่าเริ่มต้น: ""
collisionfidelity: Enum.CollisionFidelity

ค่า Enum.CollisionFidelity สำหรับผลลัพธ์ UnionOperation

ค่าเริ่มต้น: "Default"
renderFidelity: Enum.RenderFidelity

ค่า Enum.RenderFidelity ของผลลัพธ์ PartOperation

ค่าเริ่มต้น: "Automatic"

ส่งค่ากลับ

ผลลัพธ์ UnionOperation ด้วยชื่อเริ่มต้น Union .

ตัวอย่างโค้ด

This example demonstrates how to combine the geometry of one BasePart with the geometry of other part(s) to form a UnionOperation.

BasePart:UnionAsync()

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 เพื่อระบุว่า กลุ่มการชนกัน จะได้รับการยอมรับสำหรับการตรวจจับหรือไม่

พารามิเตอร์

otherPart: BasePart

ตัวอย่างโค้ด

This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.

Touching Parts Count

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 เพื่อระบุว่า กลุ่มการชนกัน จะได้รับการยอมรับสำหรับการตรวจจับหรือไม่

พารามิเตอร์

otherPart: BasePart

ส่วนอื่นที่มาสัมผัสกับส่วนที่กำหนดไว้


ตัวอย่างโค้ด

This code sample creates a BillboardGui on a part that displays the number of parts presently touching it.

Touching Parts Count

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.

Model Touched

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