การเรย์แคสต์

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

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

เลเซอร์ถูกยิงโดยลูกบอลลอย และการเรย์แคสต์จะกำหนดว่าเลเซอร์ชนกับแพลตฟอร์มหรือไม่ แพลตฟอร์มที่ถูกเลเซอร์สัมผัสจะถูกทำลายชั่วคราว

คุณสามารถเรย์แคสต์ด้วยวิธี WorldRoot:Raycast() (Workspace:Raycast()) จากต้นกำเนิด Vector3 ในทิศทาง Vector3

การเรย์แคสต์พื้นฐาน

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.new(0, 0, 0)
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)

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

  1. ต้นกำเนิดบวกเวกเตอร์ทิศทางจะบ่งบอกจุดหมายของเรย์:

    rayOrigin+rayDirection=rayDestination\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. หัก rayOrigin\text{rayOrigin} ออกจากทั้งสองข้างของสมการ:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. ทิศทางของเรย์เท่ากับจุดหมายลบต้นกำเนิด:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


local Workspace = game:GetService("Workspace")
local rayOrigin = Workspace.TestOrigin.Position
local rayDestination = Workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)

ตัวเลือกการกรอง

WorldRoot:Raycast() ยอมรับวัตถุ RaycastParams ที่ไม่บังคับซึ่งบอกให้การเรย์แคสต์รวมหรือยกเว้น BaseParts บางอย่าง, ข้ามวัสดุ น้ำ สำหรับ Terrain หรือใช้ กลุ่มการชน.

กุญแจคำอธิบาย
FilterDescendantsInstancesArray ของวัตถุที่ทายทอดใช้ในการกรองผู้เข้าร่วมการเรย์แคสต์.
FilterTypeการตั้งค่าของ Enum.RaycastFilterType ที่กำหนดวิธีการใช้งานอาเรย์ FilterDescendantsInstances ในการทำงานของการเรย์แคสต์.
  • Exclude — ทุก BasePart จะถูกพิจารณา ยกเว้น วัตถุที่เป็นทายทอดของอาเรย์.
  • Include — จะพิจารณาเฉพาะ BaseParts ที่เป็นทายทอดของอาเรย์.
IgnoreWaterBoolean ที่กำหนดว่าวัสดุ น้ำ จะถูกพิจารณาเมื่อรีย์แคสต์กับ Terrain หรือไม่.
CollisionGroupชื่อ String ของ กลุ่มการชน ที่ใช้สำหรับการทำงานการเรย์แคสต์.
การกรองการเรย์แคสต์

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {script.Parent}
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.IgnoreWater = true
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection, raycastParams)

การตรวจจับการชน

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

คุณสมบัติคำอธิบาย
InstanceBasePart หรือ Terrain เซลล์ที่เรย์ตัดข้าม
Positionตำแหน่ง Vector3 ของจุดตัดระหว่างเรย์และ Instance
Distanceระยะทางระหว่างจุดเริ่มต้นของเรย์และจุดตัด
Materialวัสดุ Enum.Material ของ BasePart หรือ Terrain ณ จุดตัด
NormalVector3 ของเวกเตอร์ปกติของด้านที่ตัดข้าม
การตรวจจับการชนของเรย์แคสต์

local Workspace = game:GetService("Workspace")
local rayOrigin = Vector3.zero
local rayDirection = Vector3.new(0, -100, 0)
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)
if raycastResult then
print("อินสแตนซ์:", raycastResult.Instance)
print("ตำแหน่ง:", raycastResult.Position)
print("ระยะทาง:", raycastResult.Distance)
print("วัสดุ:", raycastResult.Material)
print("ปกติ:", raycastResult.Normal)
else
warn("ไม่มีผลลัพธ์การเรย์แคสต์!")
end
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ