في أبسط مستوياته، رسم الشعاع هو الفعل الذي يتمثل في إرسال شعاع غير مرئي من نقطة 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.Positionlocal rayDestination = Workspace.TestDestination.Positionlocal rayDirection = rayDestination - rayOriginlocal 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.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)
كشف الاصطدام
إذا ضربت عملية رسم الشعاع جزءًا مؤهلاً من 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.zerolocal rayDirection = Vector3.new(0, -100, 0)local raycastResult = Workspace:Raycast(rayOrigin, rayDirection)if raycastResult thenprint("الجزء:", raycastResult.Instance)print("الموقع:", raycastResult.Position)print("المسافة:", raycastResult.Distance)print("المادة:", raycastResult.Material)print("العمودي:", raycastResult.Normal)elsewarn("لا توجد نتيجة لرسم الشعاع!")end