การโค้งรัศมี

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

ในระดับพื้นฐานที่สุด raycasting คือการส่งรังสีที่มองไม่เห็นจากจุด 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

  2. หัก rayOrigin จากทั้งสองด้านของสมการ:

    rayOrigin + rayDirectionrayOrigin = rayDestinationrayOrigin

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

    ทิศทางรังสี = จุดหมายรังสีจุดกำเนิดรังสี


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 ของวัตถุที่ลูกหลานถูกใช้ในการกรองเรย์คาสต์ผู้สมัคร
FilterTypeEnum.RaycastFilterType รายการที่กำหนดวิธีการใช้งานแอร์ราย์ในการดำเนินการรังสี FilterDescendantsInstances
  • Exclude — ทุก BasePart ถือว่าเป็น ยกเว้น ผู้ที่เป็นลูกหลานของวัตถุในคอลเลกชัน
  • Include — เฉพาะ BaseParts ที่เป็นลูกหลานของวัตถุในคอลเลกชันที่ถูกพิจารณา
IgnoreWaterบูลีนที่กำหนดว่าวัสดุ น้ํา จะถูกพิจารณาเมื่อเรย์คาสต์กับ Terrain
CollisionGroupชื่อสตริงของกลุ่มการชนกัน ใช้สำหรับการดำเนินการเรย์คาสต์
การกรองเรย์คาสต์

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 ที่เรย์สัมผัส
PositionVector3 ตำแหน่งของจุดบรรจบระหว่างรังสีและ Instance .
Distanceระยะห่างระหว่างจุดกำเนิดของรังสีและจุดสัมผัส
MaterialThe 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("Instance:", raycastResult.Instance)
print("Position:", raycastResult.Position)
print("Distance:", raycastResult.Distance)
print("Material:", raycastResult.Material)
print("Normal:", raycastResult.Normal)
else
warn("No raycast result!")
end