ในระดับที่พื้นฐานที่สุด, raycasting คือการส่งเสียงรังสีที่มองไม่เห็นจากจุด Vector3 ในทิศทางที่กำหนดด้วยความยาวที่กำหนดไว้ เมื่อส่ง,
การโยนลำแสง
คุณสามารถสร้างลำแสงด้วยวิธี WorldRoot:Raycast() จากจุดเริ่มต้น workspace:Raycast() ในทิศทาง Vector3
เรย์คาสต์พื้นฐาน
local rayOrigin = Vector3.new(0, 0, 0)local rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)
การกรอง
WorldRoot:Raycast() รับตัวเลือกอันเป็นไปได้ RaycastParams ที่บอกให้เรย์คาสต์เลือกรวมหรือปฏิเสธบาง BaseParts โดยอ้างว
กุญแจ | คำอธิบาย |
---|---|
FilterDescendantsInstances | Array ของวัตถุที่มีลูกหลานที่ใช้ในการกรองผู้สมัครรังสี |
FilterType | Enum.RaycastFilterTypeเรียบเรียงซึ่งกำหนดวิธีการFilterDescendantsInstancesใช้รายการในการดำเนินการ raycast |
IgnoreWater | Boolean ซึ่งกำหนดว่าวัสดุ Water จะถูกพิจารณาเมื่อสแน็ปไรสต์กับ Terrain |
CollisionGroup | ชื่อสตริงของกลุ่มความสามัคคี ที่ใช้สำหรับการใช้งาน raycasting |
การกรองโดยรังสี
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)
การคํานวณทิศทาง
เมื่อเป็นไปได้คุณสามารถคํานวณเวกเตอร์ทิศทางที่ไม่รู้จัก ( rayDirection ) โดยใช้เวกเตอร์ทิศทางที่รู้จัก ( ต้นกำเนิด และ เป้าหมาย ) นี่เป็นประโยชน์เมื่อคุณกำลัง
ตัวอ้างวิกเซตและเวกเตอร์ทิศทางบ่งชี้จุดหมายของลำแสง:
rayOrigin + rayDirection = rayDestination
ลบ rayOrigin ออกจากทั้งสองด้านของสมการ:
rayOrigin + rayDirection − rayOrigin = 0> rayDestination0> + 3> rayOrigin3>
ทิศทางของลำแสงเท่ากับจุดหมายลบค่าต้น:
rayDirection = rayDestination ลบ rayOrigin
local rayOrigin = workspace.TestOrigin.Positionlocal rayDestination = workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal raycastResult = workspace:Raycast(rayOrigin, rayDirection)
ตรวจจับการโจมตี
หาก การโคลติง raycasting ตรงกับเซลล์ Class.Terrain หรือ Class.BasePart ที่เหมาะสม จะสร้างวัตถุ 2>Datatype.RaycastResult2> ที่ประกอบด้วยผลลัพธ์ เพื
สมบัติ | คำอธิบาย |
---|---|
Instance | เซลล์ BasePart หรือ Terrain ที่รังสีเข้าถึง |
Position | Vector3 ตําแหน่งของการเชื่อมต่อระหว่างรังสีและ Instance |
Distance | ระยะระหว่างจุดเริ่มต้นของลำแสงและจุดสนามตี |
Material | The Enum.Material หรือ BasePart ที่ด้านมุมที่ตรงของสามสิ่งนี้ |
Normal | Vector3 ของเวกเตอร์ปกติของหน้าที่เชื่อมต่อ |
ตรวจจับการโจมตีโดยเรย์คาสต์
local rayOrigin = Vector3.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("Instance:", raycastResult.Instance)print("Position:", raycastResult.Position)print("Distance:", raycastResult.Distance)print("Material:", raycastResult.Material)print("Normal:", raycastResult.Normal)elsewarn("No raycast result!")end