ที่ระดับพื้นฐานที่สุด, การเรย์แคสต์ คือการส่งออกเรย์ที่มองไม่เห็นจากจุด 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) โดยใช้ ต้นกำเนิด และ จุดหมาย ที่ทราบไว้ สิ่งนี้มีประโยชน์เมื่อเรย์แคสต์ระหว่างสองจุดที่อาจเปลี่ยนแปลงได้, เช่นจากตัวละครผู้เล่นคนหนึ่งไปยังอีกคนหนึ่ง
ต้นกำเนิดบวกเวกเตอร์ทิศทางจะบ่งบอกจุดหมายของเรย์:
หัก ออกจากทั้งสองข้างของสมการ:
ทิศทางของเรย์เท่ากับจุดหมายลบต้นกำเนิด:
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 หรือใช้ กลุ่มการชน.
| กุญแจ | คำอธิบาย |
|---|---|
| FilterDescendantsInstances | Array ของวัตถุที่ทายทอดใช้ในการกรองผู้เข้าร่วมการเรย์แคสต์. |
| FilterType | การตั้งค่าของ Enum.RaycastFilterType ที่กำหนดวิธีการใช้งานอาเรย์ FilterDescendantsInstances ในการทำงานของการเรย์แคสต์. |
| IgnoreWater | Boolean ที่กำหนดว่าวัสดุ น้ำ จะถูกพิจารณาเมื่อรีย์แคสต์กับ 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 และใช้คุณสมบัติต่อไปนี้ตามต้องการ
| คุณสมบัติ | คำอธิบาย |
|---|---|
| Instance | BasePart หรือ Terrain เซลล์ที่เรย์ตัดข้าม |
| Position | ตำแหน่ง Vector3 ของจุดตัดระหว่างเรย์และ Instance |
| Distance | ระยะทางระหว่างจุดเริ่มต้นของเรย์และจุดตัด |
| Material | วัสดุ Enum.Material ของ BasePart หรือ Terrain ณ จุดตัด |
| Normal | Vector3 ของเวกเตอร์ปกติของด้านที่ตัดข้าม |
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