رسم الشعاع

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

في أبسط مستوياته، رسم الشعاع هو الفعل الذي يتمثل في إرسال شعاع غير مرئي من نقطة 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\text{rayOrigin} + \text{rayDirection} = \text{rayDestination}

  2. اطرح rayOrigin\text{rayOrigin} من كلا الجانبين من المعادلة:

    rayOrigin+rayDirectionrayOrigin=rayDestinationrayOrigin\text{rayOrigin} + \text{rayDirection} - \text{rayOrigin} = \text{rayDestination} - \text{rayOrigin}

  3. اتجاه الشعاع يساوي الوجهة مطروحًا منها الأصل:

    rayDirection=rayDestinationrayOrigin\text{rayDirection} = \text{rayDestination} - \text{rayOrigin}


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 من الكائنات التي يتم استخدامها في تصفية مرشحات رسم الشعاع.
FilterTypeتعداد Enum.RaycastFilterType الذي يحدد كيفية استخدام مصفوفة FilterDescendantsInstances في عملية رسم الشعاع.
  • Exclude — يتم اعتبار كل BasePart باستثناء تلك التي هي أبناء كائنات في المصفوفة.
  • Include — يتم اعتبار فقط BaseParts التي هي أبناء كائنات في المصفوفة.
IgnoreWaterBoolean الذي يحدد ما إذا كانت مادة الماء تعتبر عند رسم الشعاع ضد 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 التي التقيا بها الشعاع.
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
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.