ที่ระดับพื้นฐานที่สุด, การเรย์แคสต์ คือการส่งออกเรย์ที่มองไม่เห็นจากจุด 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.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastParams = RaycastParams.new()raycastParams.FilterDescendantsInstances = {script.Parent}raycastParams.FilterType = Enum.RaycastFilterType.ExcluderaycastParams.IgnoreWater = truelocal 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.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("อินสแตนซ์:", raycastResult.Instance)print("ตำแหน่ง:", raycastResult.Position)print("ระยะทาง:", raycastResult.Distance)print("วัสดุ:", raycastResult.Material)print("ปกติ:", raycastResult.Normal)elsewarn("ไม่มีผลลัพธ์การเรย์แคสต์!")end