WorldRoot
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
คลาสเบื้องหลังนี้ให้ API สำหรับคำถามและการจำลองทางภาพ 3D ทั้งหมด เช่น Workspace และ WorldModel
สรุป
คุณสมบัติ
คุณสมบัติรับทอดมาจากModelตั้งค่าระดับรายละเอียดในแบบจำลองสำหรับประสบการณ์ที่มีการเปิดใช้งานการสตรีมมิ่งด้วยตัวอย่าง
ควบคุมพฤติกรรมการสตรีมโมเดลบน Models เมื่อการสตรีมเครื่องมือเปิดใช้งาน
ส่วนหลักของ Model หรือ nil ถ้าไม่ได้ตั้งค่าไว้อย่างชัดเจน
สมบัติสินค้าเฉพาะที่ใช้เพื่อปรับแต่งรุ่นรอบ ๆ แกนของมัน การตั้งค่าคุณสมบัตินี้จะย้ายความเคลื่อนไหวของเครื่องชั่งเมื่อ Model/ScaleTo ถูกเรียกบนมัน
กำหนดตำแหน่งที่โค้งของ Model ซึ่ง ไม่ มีชุด Model.PrimaryPart ตั้งอยู่
วิธีการ
กลับ true หากมีส่วนใดส่วนหนึ่งใน BasePart สัมผัสกับส่วนอื่น
สร้างรูปร่างบล็อกในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปร่างตีโจมตี BasePart หรือ Terrain เซลล์
กลับรายการรายการที่มีขอบเขต ตรงกัน ในกล่องที่ระบุ
กลับรายการรายการที่มีชิ้นส่วนอยู่ภายในเขต กรอบเหลี่ยมของวงกลมที่กำหนดไว้
กลับรายการผู้ให้บริการที่มีพื้นที่ว่างของพื้นที่ที่ได้รับการแชร์
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):void
ย้ายส่วนที่กำหนดไว้ไปยังสถานที่ที่กำหนดโดยอัตราสมทบทางกลศาสตร์ที่กลับกันโดยไม่ต้องย้ายไปที่นั่นโดยตรงเพื่อให้แน่ใจว่าข้อต่อ ข้อจํากัด หรือการชนที่ร่วมมือใด ๆ จะเหลืออยู่ในระดับที่พอใจ
ใช้ลำแสงโดยใช้ต้นไม้, ทิศทาง, และตัวเลือก RaycastParams จากนั้นจะกลับมาที่ RaycastResult หากวัตถุหรือพื้นที่ที่เป็นไปได้สัมผัสกับลำแสง
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
โยนรูปร่างกลมในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปร่างตีโจมตี BasePart หรือ Terrain เซลล์
ขับเคลื่อนการจำลองสำหรับชิ้นส่วนในโลกไปข้างหน้าโดยใช้เวลาเพิ่มเติมที่กำหนดและชุดตั้งค่าอื่น ๆ ของ BaseParts
ตั้งค่ารุ่นนี้ให้เป็นรุ่นที่แข็งแกร่งสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องถูกตั้งไว้ให้เป็น PersistentPerPlayer เพื่อให้การเปลี่ยนแปลงพฤติกรรมเป็นผลมาจากการเพิ่ม
รวมถึงคำอธิบายของระดับที่มีทุกส่วนของแบบ
กลับขนาดของกล่องชุดที่เล็กที่สุดที่มี BaseParts ใน Model ที่ตรงกับ Model.PrimaryPart ตั้งค่า
กลับสิ่งที่เป็น Player วัตถุทั้งหมดที่วัตถุนี้มีความยืนยันสำหรับ การเรียกคืนของวิธีนี้จาก Script หรือ LocalScript ต่างกันไปตามว่าวิธีนี้เรียกได้จาก
กลับขนาดเครื่องชี้วัดที่กำหนดไว้ของแบบจำลองซึ่งเริ่มต้นด้วย 1 สำหรับแบบจำลองที่สร้างขึ้นใหม่และจะเปลี่ยนแปลงเมื่อมันถูกเคลื่อนผ่านโดย Model/ScaleTo
ย้าย PrimaryPart ไปยังตำแหน่งที่กำหนด หากไม่มีส่วนหลักได้ระบุไว้ จะใช้ส่วนหลักของแบบจำลอง
ทำให้รุ่นนี้ไม่มีอยู่ต่อไปสำหรับผู้เล่นที่กำหนด Model.ModelStreamingMode ต้องการตั้งค่าให้เป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเป็นผลมาจากการลบ
ตั้งค่าตัวปรับขนาดของแบบจำลองโดยปรับขนาดและตำแหน่งของบรรพบุรุษทั้งหมดให้มีตัวปรับขนาดของแบบจำลองที่สมเหตุสมผลเมื่อตัวปรับขนาดอยู่ที่ 1
เปลี่ยน Model โดยใช้การเคลื่อนที่ Vector3 ที่กำหนดไว้ เพื่อเก็บความตรงของโมเดล หาก BasePart หรือ 1> Class.Terrain1> ม
รับ pivot ของ Class.PVInstance
แปลง PVInstance พร้อมกับบรรพบุรุษทั้งหมดของมัน PVInstances เพื่อให้ pivot ตอนนี้อยู่ที่ CFrame ที่กำหนด
คุณสมบัติ
วิธีการ
ArePartsTouchingOthers
ArePartsTouchingOthers กลับ true หากอย่างน้อยหนึ่งใน BasePart กำลังสัมผัสกับอื่น ๆ อีกสองส่วนถือเป็น "สัมผัส" หากอยู่ภายในระยะสนามประกาศ overlapIgnored
หากไม่มีส่วนใด จะได้รับการตอบกลับว่าเป็น false
พารามิเตอร์
รายการรายการตรวจสอบว่ามีรายการใดในรายการที่สัมผัสกับรายการอื่น ๆ ที่ไม่ได้อยู่ในรายการหรือไม่
ระยะการเกี่ยวข้างของชิ้นส่วนที่ไม่ได้รับการพิจารณาก่อนที่จะพิจารณาว่าชิ้นส่วนนั้นสัมพันธ์กัน
ส่งค่ากลับ
ตัวอย่างโค้ด
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)) -- True
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- True
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
กำหนดรูปร่างบล็อกในทิศทางที่กำหนดและส่งความสามัคคีครั้งแรกด้วย BasePart หรือ Terrain เซลล์ นี่คือการใช้งานของ WorldRoot:Raycast() ใน
ในขณะที่วิธีนี้ไม่ตรวจจับ WorldRoot:GetPartsInPart() ที่ BaseParts เป็นตัวผสานรูปร่าง
หากตรวจพบการโจมตี RaycastResult จะถูกส่งกลับมาพร้อมกับข้อมูลการโจมตี สมบัติสถาน Distance จะแทนที่ระยะที่ต้องเดินทางไปยังการโ
วิธีนี้จะแสดงข้อผิดพลาดหากมีการส่งผิดพลาด CFrame ขนาดหรือการป้อนทิศทาง
พารามิเตอร์
ตําแหน่งเริ่มต้นและการหมุนของรูปร่างบล็อค
ขนาดของรูปร่างบล็อกโครงใน studs ขนาดสูงสุดคือ 512 studs
ทิศทางของ shapecast มีความเข้มขนาดเป็นระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด
ส่งค่ากลับ
ตัวอย่างโค้ด
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 โดยไม่จำเป็นต้องเปิดใช้งานสมบัติสินค้าเรียบร้อยสำหรับแต่
ตัวอักษรที่สามช่วยให้คุณสามารถปรับปรุงการทำงานข
หมายเหตุว่าคุณควรใช้ให้คุณสมบัตินี้เฉพาะในกรณีที่คุณแน่ใจว่าการเคลื่อนที่ส่วนใดส่วนหนึ่งเป็นข้อจํากัดในรหัสของคุณ การตั้งค่าคุณสมบัติ CFrame ของแต่ละส่วน
พารามิเตอร์
ส่งค่ากลับ
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() ส่งคืนรายการของชิ้นส่วนที่มีขอบชุดที่ซ้องกับกล่องที่มีขนาดอธิบายโดยใช้ศูนย์กลาง ( Datatype.CFrame และขนาด ( CFrame ) ที่ระบุโดยใช้ศู
ตามที่เน้นไว้ วิธีการเรียกคำถามทางอาคารเฉพาะจะพิจารณาปริมาณการกำหนดขอบเขตของชิ้นส่วนโดยไม่ใช้พื้นที่จริงของพวกเขา นี่อาจเป็นสิ
วิธีนี้ใช้ OverlapParams ตัวเพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางอาคาร, เช่น รายการรวมหรือรวมออก, จำนวนผลลัพธ์สูงสุ
พารามิเตอร์
ตำแหน่งของศูนย์กลางของปริมาณเสียงกล่องที่จะถูกขอ
ขนาดของกล่องที่ให้ต้องการ
ประกอบด้วยส่วนที่ใช้ซ้ำได้ของค่าตัวละคริดตัวละคร
ส่งค่ากลับ
หนึ่งรายการของ Class.BasePart|BaseParts ซึ่งตรงกับคำถามทางพื้นที่
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() ส่งคืนสามสิบหกส่วนที่มีขอบเขตซึ่ง มุมมองของกลม ซ้องกับลูกบอลที่มีขนาดอธิบายโดยใช้ Vector3 และรัศมี ( 0> number0> )
ตามที่เน้นไว้ วิธีการเรียกคำถามทางอาคารเฉพาะจะพิจารณาปริมาณการกำหนดขอบเขตของชิ้นส่วนโดยไม่ใช้พื้นที่จริงของพวกเขา นี่อาจเป็นสิ
วิธีนี้ใช้ OverlapParams ตัวเพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางอาคาร, เช่น รายการรวมหรือรวมออก, จำนวนผลลัพธ์สูงสุ
พารามิเตอร์
ตำแหน่งศูนย์กลางของปริมาณลูกศรที่ให้
รัศมีของเสียงที่ให้ไว้สำหรับการค้นหา
ประกอบด้วยส่วนที่ใช้ซ้ำได้ของค่าตัวละคริดตัวละคร
ส่งค่ากลับ
หนึ่งรายการของ Class.BasePart|BaseParts ซึ่งตรงกับคำถามทางพื้นที่
GetPartsInPart
WorldRoot:GetPartsInPart() กลับส่งคืนรายการของชิ้นส่วนที่มีพื้นที่ว่างอยู่กับชิ้นส่วนที่ต้องการ (ซึ่งต้องมีใน Class.WorldRoot เดียวกับชิ้นส่วนที่จะถูกขอ)
ตามที่กล่าวไว้ ตรวจสอบ ปริมาณที่แน่นอน ที่เป็นปริมาณที่แน่นอนโดยการใ
วิธีนี้ใช้ OverlapParams ตัวเพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางอาคาร, เช่น รายการรวมหรือรวมออก, จำนวนผลลัพธ์สูงสุ
พารามิเตอร์
ส่วนที่มีปริมาณต้องตรวจสอบกับส่วนอื่น
ประกอบด้วยส่วนที่ใช้ซ้ำได้ของค่าตัวละคริดตัวละคร
ส่งค่ากลับ
หนึ่งรายการของ Class.BasePart|BaseParts ซึ่งตรงกับคำถามทางพื้นที่
IKMoveTo
คุณสมบัตินี้ย้ายชิ้นส่วนที่กำหนดไว้ไปยังสถานที่ที่กำหนดโดย kinematics ย้อนกลับ แทนที่จะย้ายไปที่นั่นโดยตรงเพื่อให้แน่ใจว่าข้อต่อใด ��
แปลความแข็งแกร่ง เป็นตัวเลขระหว่าง 0 และ 1 ที่ระบุว่าอย่างไรอย่างน้อยหนึ่งในตำแหน่งของชิ้นส่วนจะตรงกับตำแหน่งของชิ้นส่วนเป้าหมาย CFrame หมุนค
เช่น:
- หากความแข็งแกร่งและความหมุนแข็งแกร่งเป็นสองสิ่งที่เท่ากันกับ 1 ส่วนจะย้ายไปยัง CFrame เป้าหมายโดยเฉพาะไม่ว่าจะมีข้อจํากัดทางกายภาพใด ๆ
- หากความหนาและความหมุนเป็นสองสิ่งที่เท่ากันกับ 0.5 ส่วนจะพยายามที่จะย้ายไปยังเป้าหมาย CFrame ที่แน่นอน แต่อาจถูกผลักออกจากเส้นทางโดยข้อจํากัดทางกายภาพบนเส้นทาง
- หากความหนาแน่นและความหนาแน่นหมุนเป็นสองสิ่งที่เท่ากันกับ 0 จะไม่มี CFrame เป้าหมายจะได้รับการละเลยและข้อจํากัดทางกายภาพจะแก้ไขสําหรับเป้าหมายที่ตําแหน่งที่มันอยู่
พารามิเตอร์
กำลังย้ายส่วน
ตําแหน่งที่จะย้ายชิ้นส่วนที่กําหนด
ตัวเลขระหว่าง 0 และ 1 กำหนดว่าอย่างไรอย่างรุนแรงเพื่อจับตำแหน่งของชิ้นส่วนให้ตรงกับตำแหน่งของชิ้นส่วนเป้าหมาย CFrame
ตัวเลขระหว่าง 0 และ 1 ที่ระบุว่าอย่างไรอย่างรุนแรงที่จะจับคู่การหมุนของส่วนหนึ่งกับส่วนหมุนเป้าหมาย CFrame
ช่วยให้คุณสามารถระบุว่าวัตถุใดที่ควรได้รับผลกระทบโดยความละเอียดทางกายภาพ
ส่งค่ากลับ
Raycast
สร้างลำแสงโดยใช้ต้นไม้, ทิศทาง, และตัวเลือก RaycastParams หากพบเซลล์ BasePart หร
หมายเหตุว่าความยาว (แมกนิจูด) ของเวกเตอร์ทิศทางเป็นสิ่งสำคัญเนื่องจากวัตถุ / พื้นผิวที่อยู่ไกลออกไปจากความยาวของมั
วิธีนี้ไม่ได้ใช้วัตถุ Datatype.Ray แต่ส่วนประกอบด้านความเป็นเอกของมันสามารถยืมได้จาก Ray และ Ray.Origin
พารามิเตอร์
จุดเริ่มต้นของลำแสง
เวกเตอร์ทิศทางของลำแสง หมายเหตุว่าความยาวของเวกเตอร์นี้สำคัญเนื่องจากชิ้นส่วน/พื้นผิวที่อยู่ไกลออกไปจากความยาวจะไม่ได้รับการทดสอบ
ตัวอักษรที่ใช้ในการระบุความเหมาะสมในการโค้งผ่านเรย์คาสท์ หากไม่ได้ระบุให้ จะใช้ค่าเริ่มต้นทั้งหมดโดยอ้างอิงจากทุกส่วน และ Terrain น้ำจะไม่ได้รับการเพิกเฉย
ส่งค่ากลับ
ตัวอย่างโค้ด
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() โคจรเส้นสา
ในขณะที่วิธีนี้ไม่ตรวจจับ WorldRoot:GetPartsInPart() ที่ BaseParts เป็นตัวผสานรูปร่าง
หากตรวจพบการโจมตี RaycastResult จะถูกส่งกลับมาพร้อมกับข้อมูลการโจมตี สมบัติสถาน Distance จะแทนที่ระยะที่ต้องเดินทางไปยังการโ
วิธีนี้จะแสดงข้อผิดพลาดหากมีการส่งค่ารัศมีหรือทิศทางไปยังผิดพลาด
พารามิเตอร์
ตําแหน่งเริ่มต้นของรูปร่างกลม
รัศมีของรูปร่างกลมโฉมในสตุ๊ก. รัศมีสูงสุดคือ 256 สตุ๊ก
ทิศทางของ shapecast มีความเข้มขนาดเป็นระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด
ส่งค่ากลับ
ตัวอย่างโค้ด
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 เท่านั้น ชุดอื่น ๆ จะได้รับการเพิกเฉย
ส่งค่ากลับ
ตัวอย่างโค้ด
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)