การโยนรังสี

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

ในระดับที่พื้นฐานที่สุด, 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 โดยอ้างว

กุญแจคำอธิบาย
FilterDescendantsInstancesArray ของวัตถุที่มีลูกหลานที่ใช้ในการกรองผู้สมัครรังสี
FilterTypeEnum.RaycastFilterTypeเรียบเรียงซึ่งกำหนดวิธีการFilterDescendantsInstancesใช้รายการในการดำเนินการ raycast
  • Exclude — ทุก BasePart ที่เป็นลูกหลานของวัตถุในรายการจะถูกพิจารณาว่าเป็น “ Class.RaycastFilterType|Exclude ”เว้นแต่ “0> Class.RaycastFilterType
  • Include — เฉพาะ BaseParts ที่เป็นลูกหลานของวัตถุในรายการเท่านั้นที่จะได้รับการพิจารณา
IgnoreWaterBoolean ซึ่งกำหนดว่าวัสดุ Water จะถูกพิจารณาเมื่อสแน็ปไรสต์กับ Terrain
CollisionGroupชื่อสตริงของกลุ่มความสามัคคี ที่ใช้สำหรับการใช้งาน raycasting
การกรองโดยรังสี

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)

การคํานวณทิศทาง

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

  1. ตัวอ้างวิกเซตและเวกเตอร์ทิศทางบ่งชี้จุดหมายของลำแสง:

    rayOrigin + rayDirection = rayDestination

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

    rayOrigin + rayDirectionrayOrigin = 0> rayDestination0> + 3> rayOrigin3>

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

    rayDirection = rayDestination ลบ rayOrigin


local rayOrigin = workspace.TestOrigin.Position
local rayDestination = workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = workspace:Raycast(rayOrigin, rayDirection)

ตรวจจับการโจมตี

หาก การโคลติง raycasting ตรงกับเซลล์ Class.Terrain หรือ Class.BasePart ที่เหมาะสม จะสร้างวัตถุ 2>Datatype.RaycastResult2> ที่ประกอบด้วยผลลัพธ์ เพื

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

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