WorldRoot

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

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

ไม่สามารถสร้าง

คลาสฐานนี้ให้ API สำหรับอินสแตนซ์ใดๆ ที่มีจุดประสงค์เพื่อจัดการคำถามและการจำลอง 3D เช่น Workspace และ WorldModel

สรุป

คุณสมบัติ

คุณสมบัติรับทอดมาจากModel
  • การรักษาความปลอดภัยของปลั๊กอิน
    อ่านพร้อมๆ กัน

    ตั้งระดับรายละเอียดบนโมเดลสำหรับประสบการณ์ที่มีการสตรีมตัวอย่างเปิดใช้งาน

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

    ควบคุมพฤติกรรมการสตรีมรูปแบบบน Models เมื่อการสตรีมตัวอย่างถูกเปิดใช้งาน

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

    ส่วนหลักของ Model หรือ nil ถ้าไม่ได้กำหนดไว้อย่างชัดเจน

  • ไม่ซ้ำ
    ไม่สามารถเขียนสคริปต์
    อ่านพร้อมๆ กัน

    คุณสมบัติสำหรับเอดิเตอร์เท่านั้นที่ใช้เพื่อขยายโมเดลรอบจุดศูนย์กลางของมัน การตั้งค่าคุณสมบัตินี้จะเคลื่อนย้ายเครื่องชั่งเหมือนว่า Model/ScaleTo ถูกเรียกใช้บนมัน

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

    กำหนดตำแหน่งที่ศูนย์กลางของ ซึ่งไม่ได้มีชุด ตั้งอยู่

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

วิธีการ

  • ArePartsTouchingOthers(partList : Instances,overlapIgnored : number):boolean

    ส่งคืนจริงหากใดๆ ของที่กำหนด BasePart สัมผัสกับส่วนอื่น

  • Blockcast(cframe : CFrame,size : Vector3,direction : Vector3,params : RaycastParams):RaycastResult?
    เขียนพร้อมๆ กัน

    โค้งรูปแบบบล็อกในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปแบบชนกับเซลล์ BasePart หรือ Terrain

  • BulkMoveTo(partList : Instances,cframeList : Array,eventMode : Enum.BulkMoveMode):()

    ย้ายโต๊ะของ BaseParts ไปยังโต๊ะของ CFrames

  • GetPartBoundsInBox(cframe : CFrame,size : Vector3,overlapParams : OverlapParams):Instances
    เขียนพร้อมๆ กัน

    คืนค่าเป็นคอลเลกชันของชิ้นส่วนที่มีกล่องผูกข้อมูล ซ้อนทับกล่องที่กำหนด

  • GetPartBoundsInRadius(position : Vector3,radius : number,overlapParams : OverlapParams):Instances
    เขียนพร้อมๆ กัน

    คืนค่าเป็นคอลเลกชันของชิ้นส่วนที่มีกล่องผูกข้อมูล ซึ่งซ้อนทับทรงกลมที่กำหนด

  • GetPartsInPart(part : BasePart,overlapParams : OverlapParams):Instances
    เขียนพร้อมๆ กัน

    ส่งคืนคอลเลกชันของชิ้นส่วนที่พื้นที่ใช้งานแบ่งปันกับชิ้นส่วนที่กำหนดไว้

  • IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
    การรักษาความปลอดภัยของปลั๊กอิน

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

  • Raycast(origin : Vector3,direction : Vector3,raycastParams : RaycastParams):RaycastResult?
    เขียนพร้อมๆ กัน

    โค้งรัศมีโดยใช้จุดเริ่มต้น ทิศทาง และ RaycastParams ตัวเลือก จากนั้นจะส่งคืน RaycastResult หากวัตถุหรือพื้นที่ที่เหมาะสมตัดกับรัศมี

  • Shapecast(part : BasePart,direction : Vector3,params : RaycastParams):RaycastResult?
  • Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
    เขียนพร้อมๆ กัน

    โค้งรูปทรงกลมในทิศทางที่กำหนดและส่งคืน RaycastResult หากรูปทรงชนกับเซลล์ BasePart หรือ Terrain

  • StepPhysics(dt : number,parts : Instances):()
    การรักษาความปลอดภัยของปลั๊กอิน

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

วิธีการรับทอดมาจากModel
  • AddPersistentPlayer(playerInstance : Player):()

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

  • คืนคำอธิบายของระดับที่มีส่วนประกอบทั้งหมดของโมเดล

  • คืนขนาดของกล่องล้อมรอบขนาดเล็กที่มีทั้งหมด BaseParts ใน Model สอดคล้องกับ Model.PrimaryPart หากกำหนดไว้

  • คืนวัตถุทั้งหมด Player ที่วัตถุรูปแบบนี้มีอยู่อย่างถาวรพฤติกรรมแตกต่างกันขึ้นอยู่กับว่าวิธีนี้ถูกเรียกจาก Script หรือ LocalScript หรือไม่

  • ส่งคืนเครื่องชั่งหลักของโมเดลซึ่งเริ่มต้นที่ 1 สำหรับโมเดลที่สร้างขึ้นใหม่และจะเปลี่ยนเมื่อมันถูกขยายผ่าน Model/ScaleTo

  • MoveTo(position : Vector3):()

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

  • RemovePersistentPlayer(playerInstance : Player):()

    ทำให้โมเดลนี้ไม่ยังคงอยู่สำหรับผู้เล่นที่ระบุแล้วModelStreamingMode ต้องตั้งค่าเป็น PersistentPerPlayer เพื่อให้พฤติกรรมเปลี่ยนแปลงเนื่องจากการลบ

  • ScaleTo(newScaleFactor : number):()

    ตั้งตัวคูณขนาดของโมเดลโดยปรับขนาดและตำแหน่งของโอนุการทั้งหมดเพื่อให้มีตัวคูณขนาดเท่ากับขนาดและตำแหน่งเดิมเมื่อตัวคูณขนาดอยู่ที่ 1

  • TranslateBy(delta : Vector3):()

    เปลี่ยน Model โดยออฟเซ็ตที่กำหนด Vector3 เพื่อรักษาการจัดตำแหน่งของรูปแบบหากอีก BasePart หรือ Terrain มีอยู่แล้วในตำแหน่งใหม่แล้ว ตัว Model จะซ้อนบนวัตถุที่กล่าวถึง

วิธีการรับทอดมาจากPVInstance
  • เขียนพร้อมๆ กัน

    รับจุดศูนย์กลางของ PVInstance .

  • PivotTo(targetCFrame : CFrame):()

    เปลี่ยน PVInstance พร้อมกับบรรดาลูกหลานทั้งหมดของมัน PVInstances ทำให้จุดศูนย์กลางอยู่ที่ตําแหน่งที่ระบุแล้ว CFrame

คุณสมบัติ

วิธีการ

ArePartsTouchingOthers

ArePartsTouchingOthers ส่งคืนจริงหากอย่างน้อยหนึ่งใน BasePart ที่กำหนดสัมผัสกับส่วนอื่นสองส่วนถือว่า "สัมผัส" หากอยู่ภายในเกณฑ์ระยะทาง, overlapIgnored .

หากไม่มีส่วนใดให้บริการจะส่งคืนค่าเท็จ

พารามิเตอร์

partList: Instances

รายการการตรวจสอบชิ้นส่วนเพื่อดูว่าชิ้นส่วนใดในรายการสัมผัสกับชิ้นส่วนใดที่ไม่อยู่ในรายการ

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

เกณฑ์การซ้อนทับส่วนในสตัดที่ถูกเพิกเฉยก่อนที่จะถือว่าชิ้นส่วนสัมผัสกัน

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

ส่งค่ากลับ

จริงถ้าและเฉพาะถ้าใดก็ได้ใน parts ใน partList สัมผัสส่วนอื่น (ส่วนที่ไม่ได้อยู่ในรายการส่วน) เท็จถ้าไม่มีส่วนใดผ่านไป

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

บล็อกโค้ดด้านล่างแสดงวิธีการใช้ 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 , ขนาด หรือทิศทางการป้อน

พารามิเตอร์

cframe: CFrame

ตำแหน่งเริ่มต้นและการหมุนของรูปแบบบล็อกโครงสร้าง

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

ขนาดของบล็อกคาสต์รูปทรงในสตัด ขนาดสูงสุดคือ 512 สตัด

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

ทิศทางของ shapecast โดยมีขนาดที่แทนระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด

ค่าเริ่มต้น: ""
ค่าเริ่มต้น: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

มีผลลัพธ์ของการดำเนินการ shapecast หรือ nil หากไม่มีเซลล์ที่เหมาะสม BasePart หรือ Terrain ถูกโจมตี

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

Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Blockcasting

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 ของชิ้นส่วนและโมเดลที่เชื่อมติดกันเพียงอย่างเดียวในส่วนใหญ่ของกรณีก็เร็วพอแล้ว

พารามิเตอร์

partList: Instances
ค่าเริ่มต้น: ""
cframeList: Array
ค่าเริ่มต้น: ""
ค่าเริ่มต้น: "FireAllEvents"

ส่งค่ากลับ

()

GetPartBoundsInBox

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

WorldRoot:GetPartBoundsInBox() ส่งคืนคอลเลกชันของชิ้นส่วนที่มี กล่องผูก ซ้อนกับกล่องที่มีปริมาณอธิบายโดยใช้ศูนย์กลางที่กำหนด ( CFrame ) และขนาด ( Vector3 )

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

วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน

พารามิเตอร์

cframe: CFrame

ตำแหน่งศูนย์กลางของปริมาณกล่องที่กำหนดที่จะถูกค้นหา

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

ขนาดของกล่องที่ให้มาที่จะถูกค้นหา

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

มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์

ค่าเริ่มต้น: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

Instances

ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์

GetPartBoundsInRadius

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

WorldRoot:GetPartBoundsInRadius() ส่งคืนคอลเลกชันของชิ้นส่วนที่มี กล่องผูก ซึ่งส่วนหนึ่งมีปริมาณที่อธิบายโดยใช้ศูนย์กลางที่กำหนด ( Vector3 ) และรัศมี (number)

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

วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน

พารามิเตอร์

position: Vector3

ตำแหน่งศูนย์กลางของปริมาณสเฟียร์ที่กำหนดที่จะถูกค้นหา

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

รัศมีของปริมาณที่ให้ไว้ในพื้นที่กลมที่จะถูกค้นหา

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

มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์

ค่าเริ่มต้น: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

Instances

ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์

GetPartsInPart

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

WorldRoot:GetPartsInPart() ส่งคืนคอลเลกชันของชิ้นส่วนที่พื้นที่ใช้งานแบ่งปันกับชิ้นส่วนที่กำหนด (ซึ่งต้องมีอยู่ในเดียวกัน WorldRoot เช่นชิ้นส่วนที่จะถูกค้นหา)วิธีนี้สามารถใช้แทน BasePart:GetTouchingParts() และโดยทั่วไปเป็นตัวเลือกที่ดีกว่า

ตามที่ระบุไว้ วิธีการค้นหาพื้นที่นี้พิจารณาปริมาณ ที่แน่นอน ที่ใช้โดยส่วนที่กำหนดโดยใช้การตรวจสอบการชนกระทบทางภูมิศาสตร์แบบเต็มเป็นตัวอย่าง ส่วนลึก/ว่างเปล่าจะไม่ตรงกับชิ้นส่วนที่ค้นหาภายในเว้นแต่พวกเขาจะซ้อนทับหรือสัมผัสชิ้นส่วนดังกล่าวจริงๆสำหรับปริมาณที่เรียบง่ายกว่า พิจารณาใช้ WorldRoot:GetPartBoundsInBox() หรือ WorldRoot:GetPartBoundsInRadius() เนื่องจากพวกเขามีความถูกต้องน้อยกว่า แต่มีประสิทธิภาพมากขึ้น

วิธีนี้ใช้วัตถุ เพื่ออธิบายส่วนที่ใช้ซ้ำของคำถามทางภูมิศาสตร์ เช่น รายการรวมหรือรายการยกเว้น จํานวนชิ้นส่วนสูงสุดที่จะสอบถาม กลุ่มการชนกันที่จะใช้ และว่าคำถามชื่นชอบค่า ของส่วนที่ซ้อนทับกัน มากกว่าค่าของมันเหนือค่าของมัน

พารามิเตอร์

part: BasePart

ส่วนที่มีปริมาณต้องตรวจสอบกับส่วนอื่น

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

มีส่วนที่ใช้ซ้ำของพารามิเตอร์คำถามทางภูมิศาสตร์

ค่าเริ่มต้น: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

Instances

ชุดของ BaseParts ซึ่งตรงกับคำถามทางภูมิศาสตร์

IKMoveTo

()
การรักษาความปลอดภัยของปลั๊กอิน

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

แปลความแข็งแรง เป็นตัวเลขระหว่าง 0 และ 1 ระบุว่าจะแข่งขันอย่างไรกับตําแหน่งของชิ้นส่วนกับตําแหน่งของ CFrame เป้าหมาย หมุนความตึงเครียด เป็นตัวเลขระหว่าง 0 และ 1 ระบุว่าจะหมุนชิ้นส่วนให้ตรงกับส่วนหมุนของเฟรมเป้าหมาย CFrame อย่างก้าวร้าวแค่ไหน

ตัวอย่าง:

  • หากแปลความตึงและหมุนความตึงเท่ากันทั้งสองเท่ากับ 1 ชิ้นส่วนจะถูกย้ายไปยัง CFrame เป้าหมายอย่างแม่นยำไม่ว่าจะมีข้อจำกัดทางกายภาพอะไรบ้าง
  • หากแปลความแข็งและหมุนความแข็งเท่ากันทั้งสองคือ 0.5 ชิ้นส่วนจะพยายามย้ายไปที่ CFrame เป้าหมายอย่างแม่นยำ แต่อาจถูกผลักออกจากทางโดยข้อจํากัดทางกายภาพบนมัน
  • หากแปลความแข็งและหมุนความแข็งเท่ากัน 0 แล้วเฟรมเป้าหมายจะถูกเพิกเฉยและข้อจํากัดทางกายภาพจะถูกแก้ไขสําหรับวัตถุที่ตําแหน่งที่มันอยู่

พารามิเตอร์

part: BasePart

ส่วนที่ถูกย้าย

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

ตำแหน่งที่จะย้ายส่วนที่กำหนดไว้

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

ตัวเลขระหว่าง 0 และ 1 ระบุว่าจะจับคู่ตำแหน่งชิ้นส่วนกับตำแหน่งส่วนเป้าหมายอย่างก้าวร้าวแค่ไหน CFrame

ค่าเริ่มต้น: 0.5
rotateStiffness: number

ตัวเลขระหว่าง 0 และ 1 ระบุว่าจะจับคู่การหมุนของชิ้นส่วนกับส่วนการหมุนของเป้าหมายอย่างก้าวร้าวแค่ไหน CFrame

ค่าเริ่มต้น: 0.5
collisionsMode: Enum.IKCollisionsMode

ช่วยให้คุณสามารถระบุวัตถุที่ควรได้รับผลจากความละเอียดทางกายภาพได้

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

ส่งค่ากลับ

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

โค้งรังสีโดยใช้จุดเริ่มต้น ทิศทาง และตัวเลือก RaycastParams ที่ไม่จำเป็นหากพบเซลล์ที่มีคุณสมบัติ BasePart หรือ Terrain ที่เหมาะสมก็จะส่งคืน RaycastResult ที่มีผลลัพธ์ของการดำเนินการหากไม่มีวัตถุ RaycastParams ได้รับการจัดเตรียม ค่าเริ่มต้นจะถูกใช้ (ทุกส่วนถือว่าเป็นและน้ำ Terrain จะไม่ถูกเพิกเฉย)

โปรดทราบว่าความยาว (ขนาด) ของเวกเตอร์ทิศทางมีความสำคัญเนื่องจากวัตถุ/พื้นที่ที่อยู่ไกลกว่าความยาวของมันจะไม่ถูกทดสอบหากคุณกำลังใช้ CFrame เพื่อช่วยในการสร้างส่วนประกอบของรังสี ให้พิจารณาใช้ CFrame.LookVector เป็นเวกเตอร์ทิศทางและคูณด้วยความยาวที่ต้องการตามที่แสดงในตัวอย่างด้านล่างความยาวสูงสุดของเวกเตอร์ทิศทางคือ 15,000 สตัด

วิธีนี้ไม่ ไม่ใช้วัตถุ แต่องค์ประกอบที่มาและทิศทางสามารถยืมได้จาก และ

พารามิเตอร์

origin: Vector3

จุดกำเนิดของรังสี

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

เวกเตอร์ทิศทางของรังสี โปรดทราบว่าความยาวของเวกเตอร์นี้มีความสำคัญเนื่องจากส่วน/พื้นที่ที่อยู่ไกลกว่าความยาวของมันจะไม่ถูกทดสอบ

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

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

ค่าเริ่มต้น: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

มีผลลัพธ์ของการดำเนินการรังสีหรือ nil หากไม่มีเซลล์ที่เหมาะสม BasePart หรือ 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.

Raycasting

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

พารามิเตอร์

part: BasePart
ค่าเริ่มต้น: ""
direction: Vector3
ค่าเริ่มต้น: ""
ค่าเริ่มต้น: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

Spherecast

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

โค้งรูปทรงกลมในทิศทางที่กำหนดและส่งการชนกันครั้งแรกด้วยเซลล์ BasePart หรือ Terrainนี่เป็นคล้ายกับวิธีที่ WorldRoot:Raycast() โยนรังสีเชิงเส้นในทิศทางเพื่อค้นหาการชนกัน แต่ใช้รูปแบบ 3D แทนที่จะเป็นรังสี

ไม่เหมือนกับ WorldRoot:GetPartsInPart() วิธีนี้จะไม่ตรวจพบ BaseParts ที่ เริ่มแรก ซึ่งแยกรูปร่าง

หากตรวจพบการโจมตี RaycastResult จะถูกส่งคืนที่มีข้อมูลการโจมตีคุณสมบัติ Distance แทนที่ระยะทางที่รูปต้องเดินทางเพื่อค้นหาการตี และคุณสมบัติ Position แทนที่จุดสัมผัสที่ทําให้เกิดการตี

วิธีนี้จะโยนข้อผิดพลาดหากมีการส่งรัศมีหรือทิศทางที่ไม่ถูกต้อง

พารามิเตอร์

position: Vector3

ตำแหน่งเริ่มต้นของรูปทรงกลมที่โค้ง

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

รัศมีของรูปทรงทรงกลมที่โค้งในสตัด รัศมีสูงสุดคือ 256 สตัด

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

ทิศทางของ shapecast โดยมีขนาดที่แทนระยะทางสูงสุดที่รูปร่างสามารถเดินทางได้ ระยะทางสูงสุดคือ 1024 สตัด

ค่าเริ่มต้น: ""
ค่าเริ่มต้น: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

ส่งค่ากลับ

มีผลลัพธ์ของการดำเนินการ shapecast หรือ nil หากไม่มีเซลล์ที่เหมาะสม BasePart หรือ Terrain ถูกโจมตี

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

Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Spherecasting

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

พารามิเตอร์

dt: number

จำนวนเวลาที่จะจำลอง อันนี้ต้องเป็นตัวเลขบวก มูลค่าที่ใหญ่กว่าจะเพิ่มเวลาของฟังก์ชันนี้ ขึ้น

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

ชุดของชิ้นส่วนที่จะจำลอง ชุดนี้ต้องมีตัวอย่างที่เป็นประเภท 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.

StepPhysics

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)

อีเวนต์