في أبسط مستوياته، رسم الشعاع هو الفعل الذي يتمثل في إرسال شعاع غير مرئي من نقطة 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.Position
local rayDestination = Workspace.TestDestination.Position
local rayDirection = rayDestination - rayOrigin
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)خيارات التصفية
WorldRoot:Raycast() يقبل كائن RaycastParams اختياري الذي يخبر رسم الشعاع بتضمين أو استبعاد أجزاء معينة من BaseParts، تجاهل مادة الماء لـ Terrain، أو استخدام مجموعة التصادم.
| المفتاح | الوصف |
|---|---|
| FilterDescendantsInstances | Array من الكائنات التي يتم استخدامها في تصفية مرشحات رسم الشعاع. |
| FilterType | تعداد Enum.RaycastFilterType الذي يحدد كيفية استخدام مصفوفة FilterDescendantsInstances في عملية رسم الشعاع. |
| IgnoreWater | Boolean الذي يحدد ما إذا كانت مادة الماء تعتبر عند رسم الشعاع ضد 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