WorldRoot
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
คลาสฐานนี้ให้ API สำหรับอินสแตนซ์ใดๆ ที่มีจุดประสงค์เพื่อจัดการคำถามและการจำลอง 3D เช่น Workspace และ WorldModel
สรุป
คุณสมบัติ
คุณสมบัติรับทอดมาจากModelตั้งระดับรายละเอียดบนโมเดลสำหรับประสบการณ์ที่มีการสตรีมตัวอย่างเปิดใช้งาน
ควบคุมพฤติกรรมการสตรีมรูปแบบบน Models เมื่อการสตรีมตัวอย่างถูกเปิดใช้งาน
ส่วนหลักของ Model หรือ nil ถ้าไม่ได้กำหนดไว้อย่างชัดเจน
คุณสมบัติสำหรับเอดิเตอร์เท่านั้นที่ใช้เพื่อขยายโมเดลรอบจุดศูนย์กลางของมัน การตั้งค่าคุณสมบัตินี้จะเคลื่อนย้ายเครื่องชั่งเหมือนว่า Model/ScaleTo ถูกเรียกใช้บนมัน
กำหนดตำแหน่งที่ศูนย์กลางของ ซึ่งไม่ได้มีชุด ตั้งอยู่
วิธีการ
ส่งคืนจริงหากใดๆ ของที่กำหนด BasePart สัมผัสกับส่วนอื่น
โค้งรูปแบบบล็อกในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปแบบชนกับเซลล์ BasePart หรือ Terrain
คืนค่าเป็นคอลเลกชันของชิ้นส่วนที่มีกล่องผูกข้อมูล ซ้อนทับกล่องที่กำหนด
คืนค่าเป็นคอลเลกชันของชิ้นส่วนที่มีกล่องผูกข้อมูล ซึ่งซ้อนทับทรงกลมที่กำหนด
ส่งคืนคอลเลกชันของชิ้นส่วนที่พื้นที่ใช้งานแบ่งปันกับชิ้นส่วนที่กำหนดไว้
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
ย้ายส่วนที่กำหนดไว้ไปยังตำแหน่งที่กำหนดผ่านกินามิกส์ย้อนกลับแทนที่จะย้ายไปที่นั่นโดยตรงเพื่อให้แน่ใจว่าข้อต่อ ข้อจำกัด หรือการชนกันที่ส่วนมีส่วนร่วมจะได้รับความพึงพอใจทางกายภาพ
โค้งรัศมีโดยใช้จุดเริ่มต้น ทิศทาง และ RaycastParams ตัวเลือก จากนั้นจะส่งคืน RaycastResult หากวัตถุหรือพื้นที่ที่เหมาะสมตัดกับรัศมี
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
โค้งรูปทรงกลมในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปทรงชนกับเซลล์ BasePart หรือ Terrain
เพิ่มการจำลองสำหรับชิ้นส่วนในโลกไปข้างหน้าตามการเพิ่มเวลาที่กำหนดและชุดตั้งค่าทางเลือก BaseParts ที่เลือก
ตั้งโมเดลนี้ให้เป็นถาวรสำหรับผู้เล่นที่ระบุ ModelStreamingMode ต้องตั้งค่าเป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเนื่องจากการเพิ่มขึ้น
คืนคำอธิบายของระดับที่มีส่วนประกอบทั้งหมดของโมเดล
คืนขนาดของกล่องล้อมรอบขนาดเล็กที่มีทั้งหมด BaseParts ใน Model สอดคล้องกับ Model.PrimaryPart หากกำหนดไว้
คืนวัตถุทั้งหมด Player ที่วัตถุรูปแบบนี้มีอยู่อย่างถาวรพฤติกรรมแตกต่างกันขึ้นอยู่กับว่าวิธีนี้ถูกเรียกจาก Script หรือ LocalScript หรือไม่
ส่งคืนเครื่องชั่งหลักของโมเดลซึ่งเริ่มต้นที่ 1 สำหรับโมเดลที่สร้างขึ้นใหม่และจะเปลี่ยนเมื่อมันถูกขยายผ่าน Model/ScaleTo
ย้าย PrimaryPart ไปยังตำแหน่งที่กำหนด หากส่วนหลักไม่ได้ระบุไว้ ส่วนรากของโมเดลจะถูกใช้
ทำให้โมเดลนี้ไม่ยังคงอยู่สำหรับผู้เล่นที่ระบุแล้วModelStreamingMode ต้องตั้งค่าเป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเนื่องจากการลบ
ตั้งตัวคูณขนาดของโมเดลโดยปรับขนาดและตำแหน่งของโอนุการทั้งหมดเพื่อให้มีตัวคูณขนาดเท่ากับขนาดและตำแหน่งเดิมเมื่อตัวคูณขนาดอยู่ที่ 1
เปลี่ยน Model โดยออฟเซ็ตที่กำหนด Vector3 เพื่อรักษาการจัดตำแหน่งของรูปแบบหากอีก BasePart หรือ Terrain มีอยู่แล้วในตำแหน่งใหม่แล้ว ตัว Model จะซ้อนบนวัตถุที่กล่าวถึง
รับจุดศูนย์กลางของ PVInstance .
เปลี่ยน PVInstance พร้อมกับบรรดาลูกหลานทั้งหมดของมัน PVInstances ทำให้จุดศูนย์กลางอยู่ที่ตําแหน่งที่ระบุแล้ว CFrame
คุณสมบัติ
วิธีการ
ArePartsTouchingOthers
ArePartsTouchingOthers ส่งคืนจริงหากอย่างน้อยหนึ่งใน BasePart ที่กำหนดสัมผัสกับส่วนอื่นสองส่วนถือว่า "สัมผัส" หากอยู่ภายในเกณฑ์ระยะทาง, overlapIgnored .
หากไม่มีส่วนใดให้บริการจะส่งคืนค่าเท็จ
พารามิเตอร์
รายการการตรวจสอบชิ้นส่วนเพื่อดูว่าชิ้นส่วนใดในรายการสัมผัสกับชิ้นส่วนใดที่ไม่อยู่ในรายการ
เกณฑ์การซ้อนทับส่วนในสตัดที่ถูกเพิกเฉยก่อนที่จะถือว่าชิ้นส่วนสัมผัสกัน
ส่งค่ากลับ
ตัวอย่างโค้ด
บล็อกโค้ดด้านล่างแสดงวิธีการใช้ WorldRoot:ArePartsTouchingOthers() เพื่อตรวจสอบว่าชิ้นส่วนในรายการสัมผัสกับชิ้นส่วนใดในพื้นที่ทำงานที่ไม่ได้อยู่ในรายการ
ตัวสคริปต์แรกสร้างส่วนสี่เหลี่ยมสองส่วนที่ซ้อนกัน 1 สตัด, Part1 และ Part2จากนั้นจะพิมพ์ค่าที่ส่งคืนโดย ArePartsTouchingOthers() เมื่อส่งส่วนที่ 1 ใน partList ในสามมูลค่าซ้อนทับที่แตกต่างกัน: 0 , 0.999 และ 1ครั้งแรกสองครั้งที่ ArePartsTouchingOthers() ถูกเรียกกลับ false เพราะมูลค่าการซ้อนทับน้อยกว่าระยะทางที่ส่วน 1 และส่วน 2 ซ้อนทับกันการโทรครั้งที่สามส่งคืน true เพราะค่าซ้อนทับเท่ากับระยะทางที่ชิ้นส่วนซ้อนกัน
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- จริง
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- จริง
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
โค้งรูปแบบบล็อกในทิศทางที่กำหนดและส่งการชนกันครั้งแรกด้วยเซลล์ BasePart หรือ Terrainนี่เป็นคล้ายกับวิธีที่ WorldRoot:Raycast() โยนรังสีเชิงเส้นในทิศทางเพื่อค้นหาการชนกัน แต่ใช้รูปแบบ 3D แทนที่จะเป็นรังสี
ไม่เหมือนกับ WorldRoot:GetPartsInPart() วิธีนี้จะไม่ตรวจพบ BaseParts ที่ เริ่มแรก ซึ่งแยกรูปร่าง
หากตรวจพบการโจมตี RaycastResult จะถูกส่งคืนที่มีข้อมูลการโจมตีคุณสมบัติ Distance แทนที่ระยะทางที่รูปต้องเดินทางเพื่อค้นหาการตี และคุณสมบัติ Position แทนที่จุดสัมผัสที่ทําให้เกิดการตี
วิธีนี้โยนข้อผิดพลาดหากส่งข้อมูลที่ไม่ถูกต้อง CFrame , ขนาด หรือทิศทางการป้อน
พารามิเตอร์
ตำแหน่งเริ่มต้นและการหมุนของรูปแบบบล็อกโครงสร้าง
ขนาดของบล็อกคาสต์รูปทรงในสตัด ขนาดสูงสุดคือ 512 สตัด
ทิศทางของ shapecast โดยมีขนาดที่แทนระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด
ส่งค่ากลับ
ตัวอย่างโค้ด
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
ฟังก์ชันนี้ย้ายตารางของ BaseParts ไปยังตารางของ CFrames โดยไม่จำเป็นต้องยิงอีเวนต์ค่าเริ่มต้น Changedสิ่งนี้ให้วิธีที่รวดเร็วมากในการย้ายจํานวนชิ้นส่วนจํานวนมากเนื่องจากคุณไม่ต้องจ่ายค่าใช้จ่ายของชุดคุณสมบัติแยกต่างหากสําหรับแต่ละชิ้นส่วน
อาร์กิวเมนต์ที่สามช่วยให้คุณสามารถปรับปรุงการดำเนินการเคลื่อนที่ต่อไปได้โดยค่าเริ่มต้น, อีเวนต์ Changed ของแต่ละส่วนจะถูกเรียกสำหรับ Position, Orientation, และ CFrameอย่างไรก็ตาม หากคุณระบุ FireCFrameChanged เป็นอาร์กิวเมนต์ที่สาม จะมีการยิงเหตุการณ์ Changed สำหรับคุณสมบัติ CFrame เท่านั้น
โปรดทราบว่าคุณควรใช้ฟังก์ชันนี้เฉพาะถ้าคุณแน่ใจว่าการเคลื่อนที่ส่วนเป็นขวางในโค้ดของคุณการตั้งค่าคุณสมบัติ CFrame ของชิ้นส่วนและโมเดลที่เชื่อมติดกันเพียงอย่างเดียวในส่วนใหญ่ของกรณีก็เร็วพอแล้ว
พารามิเตอร์
ส่งค่ากลับ
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() ส่งคืนคอลเลกชันของชิ้นส่วนที่มี กล่องผูก ซ้อนกับกล่องที่มีปริมาณอธิบายโดยใช้ศูนย์กลางที่กำหนด ( CFrame ) และขนาด ( Vector3 )
ตามที่เน้นไว้ วิธีการค้นหาพื้นที่นี้พิจารณาอย่างมีประสิทธิภาพเกี่ยวกับปริมาณกล่องผูกของชิ้นส่วนมากกว่าปริมาณที่ใช้จริงนี่อาจเป็นสิ่งสำคัญเมื่อพิจารณาถึงทรงกระบอก ทรงกลม สหภาพ และ MeshParts ซึ่งมีรูปทรงไม่บล็อกสำหรับกรณีที่ความถูกต้องเป็นสิ่งสำคัญโดยเฉพาะ ให้ใช้ WorldRoot:GetPartsInPart() แทน หรือกรองผลลัพธ์ของวิธีนี้ด้วยตัวคุณเอง
วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน
พารามิเตอร์
ตำแหน่งศูนย์กลางของปริมาณกล่องที่กำหนดที่จะถูกค้นหา
ขนาดของกล่องที่ให้มาที่จะถูกค้นหา
มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์
ส่งค่ากลับ
ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() ส่งคืนคอลเลกชันของชิ้นส่วนที่มี กล่องผูก ซึ่งส่วนหนึ่งมีปริมาณที่อธิบายโดยใช้ศูนย์กลางที่กำหนด ( Vector3 ) และรัศมี (number)
ตามที่เน้นไว้ วิธีการค้นหาพื้นที่นี้พิจารณาอย่างมีประสิทธิภาพเกี่ยวกับปริมาณกล่องผูกของชิ้นส่วนมากกว่าปริมาณที่ใช้จริงนี่อาจเป็นสิ่งสำคัญเมื่อพิจารณาถึงทรงกระบอก ทรงกลม สหภาพ และ MeshParts ซึ่งมีรูปทรงไม่บล็อกสำหรับกรณีที่ความถูกต้องเป็นสิ่งสำคัญโดยเฉพาะ ให้ใช้ WorldRoot:GetPartsInPart() แทน หรือกรองผลลัพธ์ของวิธีนี้ด้วยตัวคุณเอง
วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน
พารามิเตอร์
ตำแหน่งศูนย์กลางของปริมาณสเฟียร์ที่กำหนดที่จะถูกค้นหา
รัศมีของปริมาณที่ให้ไว้ในพื้นที่กลมที่จะถูกค้นหา
มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์
ส่งค่ากลับ
ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์
GetPartsInPart
WorldRoot:GetPartsInPart() ส่งคืนคอลเลกชันของชิ้นส่วนที่พื้นที่ใช้งานแบ่งปันกับชิ้นส่วนที่กำหนด (ซึ่งต้องมีอยู่ในเดียวกัน WorldRoot เช่นชิ้นส่วนที่จะถูกค้นหา)วิธีนี้สามารถใช้แทน BasePart:GetTouchingParts() และโดยทั่วไปเป็นตัวเลือกที่ดีกว่า
ตามที่ระบุไว้ วิธีการค้นหาพื้นที่นี้พิจารณาปริมาณ ที่แน่นอน ที่ใช้โดยส่วนที่กำหนดโดยใช้การตรวจสอบการชนกระทบทางภูมิศาสตร์แบบเต็มเป็นตัวอย่าง ส่วนลึก/ว่างเปล่าจะไม่ตรงกับชิ้นส่วนที่ค้นหาภายในเว้นแต่พวกเขาจะซ้อนทับหรือสัมผัสชิ้นส่วนดังกล่าวจริงๆสำหรับปริมาณที่เรียบง่ายกว่า พิจารณาใช้ WorldRoot:GetPartBoundsInBox() หรือ WorldRoot:GetPartBoundsInRadius() เนื่องจากพวกเขามีความถูกต้องน้อยกว่า แต่มีประสิทธิภาพมากขึ้น
วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน
พารามิเตอร์
ส่วนที่มีปริมาณต้องตรวจสอบกับส่วนอื่น
มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์
ส่งค่ากลับ
ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์
IKMoveTo
ฟังก์ชันนี้ย้ายส่วนที่ระบุไปยังตำแหน่งที่ระบุผ่าน คินามิกส์ย้อนกลับ แทนที่จะย้ายไปที่นั่นโดยตรงเพื่อให้แน่ใจว่าข้อต่อ constraints หรือการชนกันที่ส่วนมีส่วนร่วมจะยังคงพอใจทางกายภาพขณะนี้ฟังก์ชันนี้มีอยู่เฉพาะใน Studio ถึง plugins เนื่องจากขณะนี้มันขัดแย้งกับฟิสิกส์ของเกมที่กําลังดําเนินอยู่
แปลความแข็งแรง เป็นตัวเลขระหว่าง 0 และ 1 ระบุว่าจะแข่งขันอย่างไรกับตําแหน่งของชิ้นส่วนกับตําแหน่งของ CFrame เป้าหมาย หมุนความตึงเครียด เป็นตัวเลขระหว่าง 0 และ 1 ระบุว่าจะหมุนชิ้นส่วนให้ตรงกับส่วนหมุนของเฟรมเป้าหมาย CFrame อย่างก้าวร้าวแค่ไหน
ตัวอย่าง:
- หากแปลความตึงและหมุนความตึงเท่ากันทั้งสองเท่ากับ 1 ชิ้นส่วนจะถูกย้ายไปยัง CFrame เป้าหมายอย่างแม่นยำไม่ว่าจะมีข้อจำกัดทางกายภาพอะไรบ้าง
- หากแปลความแข็งและหมุนความแข็งเท่ากันทั้งสองคือ 0.5 ชิ้นส่วนจะพยายามย้ายไปที่ CFrame เป้าหมายอย่างแม่นยำ แต่อาจถูกผลักออกจากทางโดยข้อจํากัดทางกายภาพบนมัน
- หากแปลความแข็งและหมุนความแข็งเท่ากัน 0 แล้วเฟรมเป้าหมายจะถูกเพิกเฉยและข้อจํากัดทางกายภาพจะถูกแก้ไขสําหรับวัตถุที่ตําแหน่งที่มันอยู่
พารามิเตอร์
ส่วนที่ถูกย้าย
ตำแหน่งที่จะย้ายส่วนที่กำหนดไว้
ตัวเลขระหว่าง 0 และ 1 ระบุว่าจะจับคู่ตำแหน่งชิ้นส่วนกับตำแหน่งส่วนเป้าหมายอย่างก้าวร้าวแค่ไหน CFrame
ตัวเลขระหว่าง 0 และ 1 ระบุว่าจะจับคู่การหมุนของชิ้นส่วนกับส่วนการหมุนของเป้าหมายอย่างก้าวร้าวแค่ไหน CFrame
ช่วยให้คุณสามารถระบุวัตถุที่ควรได้รับผลจากความละเอียดทางกายภาพได้
ส่งค่ากลับ
Raycast
โค้งรังสีโดยใช้จุดเริ่มต้น ทิศทาง และตัวเลือก RaycastParams ที่ไม่จำเป็นหากพบเซลล์ที่มีคุณสมบัติ BasePart หรือ Terrain ที่เหมาะสมก็จะส่งคืน RaycastResult ที่มีผลลัพธ์ของการดำเนินการหากไม่มีวัตถุ RaycastParams ได้รับการจัดเตรียม ค่าเริ่มต้นจะถูกใช้ (ทุกส่วนถือว่าเป็นและน้ำ Terrain จะไม่ถูกเพิกเฉย)
โปรดทราบว่าความยาว (ขนาด) ของเวกเตอร์ทิศทางมีความสำคัญเนื่องจากวัตถุ/พื้นที่ที่อยู่ไกลกว่าความยาวของมันจะไม่ถูกทดสอบหากคุณกำลังใช้ CFrame เพื่อช่วยในการสร้างส่วนประกอบของรังสี ให้พิจารณาใช้ CFrame.LookVector เป็นเวกเตอร์ทิศทางและคูณด้วยความยาวที่ต้องการตามที่แสดงในตัวอย่างด้านล่างความยาวสูงสุดของเวกเตอร์ทิศทางคือ 15,000 สตัด
วิธีนี้ไม่ ไม่ใช้วัตถุ แต่องค์ประกอบที่มาและทิศทางสามารถยืมได้จาก และ
พารามิเตอร์
จุดกำเนิดของรังสี
เวกเตอร์ทิศทางของรังสี โปรดทราบว่าความยาวของเวกเตอร์นี้มีความสำคัญเนื่องจากส่วน/พื้นที่ที่อยู่ไกลกว่าความยาวของมันจะไม่ถูกทดสอบ
วัตถุที่ใช้เพื่อกำหนดความเหมาะสมในการโจมตีในการดำเนินการรังสีเรย์หากไม่ได้ระบุค่าเริ่มต้นจะใช้ค่าเริ่มต้นในกรณีที่ทุกส่วนถูกพิจารณาและน้ำ Terrain ไม่ถูกเพิกเฉย
ส่งค่ากลับ
ตัวอย่างโค้ด
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
พารามิเตอร์
ส่งค่ากลับ
Spherecast
โค้งรูปทรงกลมในทิศทางที่กำหนดและส่งการชนกันครั้งแรกด้วยเซลล์ BasePart หรือ Terrainนี่เป็นคล้ายกับวิธีที่ WorldRoot:Raycast() โยนรังสีเชิงเส้นในทิศทางเพื่อค้นหาการชนกัน แต่ใช้รูปแบบ 3D แทนที่จะเป็นรังสี
ไม่เหมือนกับ WorldRoot:GetPartsInPart() วิธีนี้จะไม่ตรวจพบ BaseParts ที่ เริ่มแรก ซึ่งแยกรูปร่าง
หากตรวจพบการโจมตี RaycastResult จะถูกส่งคืนที่มีข้อมูลการโจมตีคุณสมบัติ Distance แทนที่ระยะทางที่รูปต้องเดินทางเพื่อค้นหาการตี และคุณสมบัติ Position แทนที่จุดสัมผัสที่ทําให้เกิดการตี
วิธีนี้จะโยนข้อผิดพลาดหากมีการส่งรัศมีหรือทิศทางที่ไม่ถูกต้อง
พารามิเตอร์
ตำแหน่งเริ่มต้นของรูปทรงกลมที่โค้ง
รัศมีของรูปทรงทรงกลมที่โค้งในสตัด รัศมีสูงสุดคือ 256 สตัด
ทิศทางของ shapecast โดยมีขนาดที่แทนระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด
ส่งค่ากลับ
ตัวอย่างโค้ด
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
เพิ่มการจำลองสำหรับชิ้นส่วนในโลกไปข้างหน้าตามการเพิ่มเวลาที่กำหนดและชุดตั้งค่าทางเลือก BasePart ที่เลือกเมื่อระบุชุดอะไหล่ จะมีการจำลองเฉพาะชิ้นส่วนเหล่านี้เท่านั้น และชิ้นส่วนอื่น ๆ ทั้งหมดในโลกจะถูกจัดการเป็นที่ติดตั้งเมื่ออาร์กิวเมนต์นี้ถูกละเว้นทั้งหมดส่วนในโลกจะถูกรวมอยู่ในการจำลองการเพิ่มเวลาที่กำหนดไว้สามารถเป็นตัวเลขบวกใดๆ ที่มีมูลค่ามากขึ้นเพิ่มเวลาของฟังก์ชันขึ้นอยู่กับมูลค่าของการเพิ่มเวลาที่เพิ่มขึ้นระบบฟิสิกส์อาจแบ่งออกเป็นหลายขั้นตอนเพื่อรักษาความถูกต้องและความเสถียรของการจำลองแม้ว่าฟังก์ชันจะดําเนินการหลายขั้นตอน ผลลัพธ์ของการจำลองจะเห็นได้เฉพาะเมื่อฟังก์ชันสําเร็จแล้วเพื่อแสดงขั้นตอนเฉพาะของการจำลอง ฟังก์ชันสามารถเรียกได้ทุกๆ ก้าวหนึ่งต่อ RenderStep ผ่านเหตุการณ์ RunService.RenderStepped
พารามิเตอร์
จำนวนเวลาที่จะจำลอง อันนี้ต้องเป็นตัวเลขบวก มูลค่าที่ใหญ่กว่าจะเพิ่มเวลาของฟังก์ชันนี้ ขึ้น
ชุดของชิ้นส่วนที่จะจำลอง ชุดนี้ต้องมีตัวอย่างที่เป็นประเภท BasePart ทุกประเภทอื่นจะถูกเพิกเฉย
ส่งค่ากลับ
ตัวอย่างโค้ด
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)