Roblox Guidebookقاعدة المعرفة
العربية ⌄

Studio / ROBLOX

مجموعات التصادم في Roblox Studio: إعداد مجموعتين والتحقق منهما

أنشئ مجموعتين في مشهد تدريبي صغير، واضبط علاقتهما في المصفوفة، ثم افحص النتيجة بأجزاء فيزيائية. يميّز الدليل بين محرر Studio وسكربت الخادم ويستخدم أساليب Workspace الحالية.

آخر تحديث:

ما الذي تتحكم به مجموعات التصادم #

تخيّل ممراً تدريبياً يدفع فيه فريقان صناديق ملوّنة. ينبغي لصناديق الفريقين المختلفين أن تمر عبر بعضها، بينما تتصادم صناديق الفريق نفسه، بينما تتوقف جميعها عند الأرض والجدران. هذا مثال تعليمي خيالي وليس وصفاً للعبة منشورة.

تحدد Collision Groups قواعد التصادم لفئات من الأجزاء الفيزيائية. بدلاً من ضبط كل زوج من العناصر، عيّن كل BasePart إلى مجموعة وحدد في مصفوفة المجموعات التي تتصادم. الاسم وحده لا يغيّر السلوك؛ المهم هو تعيين الجزء وعلاقة المصفوفة.

إعداد مشهد تدريبي صغير #

ابدأ بـ Baseplate جديد أو نسخة من المشروع واحفظها باسم منفصل. أضف أرضية واسعة مثبتة وجداراً وجزأين صغيرين كالصندوق: أزرق وبرتقالي. اترك الصندوقين غير مثبتين، وباعد بينهما وضعهما فوق الأرض. ركز أولاً على الفيزياء.

تحقق من أن CanCollide = true لكل جزء. إذا كان معطلاً فلن يقدم الجزء المقاومة الفيزيائية المعتادة حتى إن كانت المجموعة تسمح بالتصادم. يجب أن يكون الصندوقان من نوع BasePart مثل Part أو MeshPart لا مجلدين أو نموذجين. تعيّن المجموعة إلى الأجزاء؛ افحص كل جزء مناسب في النموذج متعدد الأجزاء.

زوج المجموعاتالإعدادالمتوقع في المشهد
BlueCrates ↔ BlueCratesمفعّلالصناديق الزرقاء تتوقف بعضها عند بعض
OrangeCrates ↔ OrangeCratesمفعّلالصناديق البرتقالية تتوقف بعضها عند بعض
BlueCrates ↔ OrangeCratesمعطّلالألوان المختلفة تمر عبر بعضها
BlueCrates ↔ Defaultمفعّلالأزرق يصطدم بالأرض والجدار
OrangeCrates ↔ Defaultمفعّلالبرتقالي يصطدم بالأرض والجدار

خطط للمصفوفة قبل تعيين الأجزاء #

استخدم المجموعتين BlueCrates وOrangeCrates. أبقِ التصادم مع Default مفعلاً لكلتيهما، وعطّل العلاقة بين مجموعتي التدريب. وجود صندوقين في كل مجموعة يجعل الملاحظة أسهل.

المصفوفة تصف أزواجاً وليست إعداداً باتجاه واحد. تنطبق علاقة A وB على الجهتين: إذا لم تتصادم BlueCrates مع OrangeCrates فستمر الصناديق البرتقالية عبر الزرقاء أيضاً. علاقة المجموعة بنفسها تتحكم بالأجزاء ضمنها. اتركها مفعلة إذا كان ينبغي لصناديق الفريق الواحد دفع بعضها.

إنشاء المجموعات في محرر Studio #

افتح محرر Collision Groups. تذكر وثائق Roblox الحالية المسار Window > 3D؛ وقد يختلف موضع اللوحة أو اسمها حسب إصدار Studio. اختر Workspace إذا ظهر محدد للعالم. أضف BlueCrates وOrangeCrates عبر Add Group بأسماء فريدة.

تتضمن اللوحة Default افتراضياً. تبدأ جميع الأجزاء فيها ولا يمكن إعادة تسميتها أو حذفها. تأكد من ظهور المجموعتين في المصفوفة ثم عطّل فقط تقاطع BlueCrates/OrangeCrates. إذا عرضت اللوحة خلية لكل جهة، تحقق من حالة الزوج. احفظ المشروع.

تعيين BaseParts المقصودة #

حدد الصندوقين الأزرقين في العرض ثلاثي الأبعاد واستخدم زر الإضافة (⊕) في صف BlueCrates لتعيينهما. كرر للصندوقين البرتقاليين. يعتمد شكل اللوحة الدقيق على إصدار Studio. حدد كل صندوق وافحص CollisionGroup في Properties.

ينقل التعيين الجديد الجزء من مجموعته السابقة؛ لا ينتمي الجزء إلا لمجموعة واحدة في اللحظة نفسها. وسّع النماذج وافحص كل الأجزاء الفيزيائية كيلا يبقى جزء في Default. لا تخلط بين CollisionGroup وCanCollide: الأول يختار قواعد المجموعة والثاني يشغّل التصادم الفيزيائي للجزء أو يوقفه.

ضبط المصفوفة وفهم التناظر #

المصفوفة المطلوبة: BlueCrates ↔ BlueCrates مفعّل؛ OrangeCrates ↔ OrangeCrates مفعّل؛ BlueCrates ↔ OrangeCrates معطّل؛ وكل مجموعة تدريب ↔ Default مفعّل. يعني التفعيل أن الزوج يمكن أن يتصادم فيزيائياً إذا سمحت الإعدادات الأخرى. ويعني التعطيل مرور الأجزاء عبر بعضها حتى لو كان CanCollide مفعلاً لكليهما.

إذا أردت استثناء زوج محدد من الأجزاء فقط، تقترح Roblox النظر في NoCollisionConstraint. تكون Collision Groups أنسب عندما تنطبق القاعدة على عناصر كثيرة. لا تنشئ مجموعات عديدة لاستثناء فردي.

المصفوفة: تمر المجموعتان عبر بعضهما وتصطدمان مع Default.افتح الصورة بالحجم الكامل ↗
رسم تعليمي أصلي؛ ليس لقطة من Studio ولا نتيجة اختبار.

المثال نفسه في سكربت الخادم #

لمثال برمجي مكافئ، ضع Script عادياً داخل ServerScriptService وأنشئ جزأين في Workspace باسم BlueCrate وOrangeCrate. يسجل المثال المجموعات إن لم تكن مسجلة ويضبط العلاقة ويعين الجزأين:

توثق API الحالية RegisterCollisionGroup وIsCollisionGroupRegistered وCollisionGroupSetCollidable على Workspace/WorldRoot. يجب تنفيذ تسجيل المجموعات وتعديل العلاقات على الخادم. من العملي إعداد المجموعات مسبقاً في محرر Studio؛ وتشير Roblox إلى كلفة بسيطة للتسجيل تعتمد على عدد أجزاء Workspace. تجنب PhysicsService:CreateCollisionGroup() وSetPartCollisionGroup() القديمة في الأمثلة الجديدة؛ مرجع PhysicsService الحالي يصنف تلك الواجهة قديمة ويوجه إدارة التصادم إلى Workspace.

يعين هذا المثال القصير جزأين منفردين فقط. ولا يعالج جميع أجزاء نموذج أو شخصية؛ يجب للتوسعة المرور على العناصر التابعة وتعيين كل BasePart. ينبغي أن تطابق الأسماء عناصر Explorer.

local workspace = game:GetService("Workspace")
local blueName = "BlueCrates"
local orangeName = "OrangeCrates"

for _, name in {blueName, orangeName} do
    if not workspace:IsCollisionGroupRegistered(name) then
        workspace:RegisterCollisionGroup(name)
    end
end

workspace:CollisionGroupSetCollidable(blueName, blueName, true)
workspace:CollisionGroupSetCollidable(orangeName, orangeName, true)
workspace:CollisionGroupSetCollidable(blueName, "Default", true)
workspace:CollisionGroupSetCollidable(orangeName, "Default", true)
workspace:CollisionGroupSetCollidable(blueName, orangeName, false)
workspace.BlueCrate.CollisionGroup = blueName
workspace.OrangeCrate.CollisionGroup = orangeName

فحص السلوك في تشغيل منفصل #

احفظ المشهد ثم استخدم وضع تشغيل في Studio يبدأ المحاكاة مثل Play. هذه خطة اختبار وليست اختباراً نُفذ هنا: لم نشغّل Studio ولم نلاحظ نتيجة فيزيائية.

ضع الصندوقين الأزرق والبرتقالي بحيث يتلامسان؛ عند تعطيل العلاقة يُتوقع أن يمر كل منهما عبر الآخر. ينبغي أن يتصادم الأزرق مع الأزرق والبرتقالي مع البرتقالي. وينبغي أن يتوقف كل صندوق عند أرضية وجدار Default. أوقف المحاكاة وفعّل علاقة Blue/Orange وحدها ثم شغّل مرة أخرى وقارن ذلك الزوج. قبل كل مقارنة تحقق من الموضع الابتدائي وCanCollide.

سجل النتيجة الفعلية بعد تشغيلك. لا تثبت محاكاة محلية واحدة السلوك في كل حالات الشبكة أو الأجهزة.

اختبر زوجًا واحدًا في كل تشغيل. ضع الصندوق السفلي على الأرض والعلوي فوقه مباشرة مع فجوة هوائية، واتركهما غير مثبتين. عند بدء المحاكاة يسقط العلوي على السفلي. المتوقع تماس داخل المجموعة نفسها ومرور عبر اللون الآخر عند تعطيل العلاقة. ثم فعّل العلاقة بين اللونين وكرر الترتيب نفسه. لاختبار الجدار ضع صندوقًا بجانبه وادفعه بالشخصية، وافحص الأرض منفصلة. دوّن ما لاحظته بعد التشغيل بدلًا من نسخ النتيجة المتوقعة.

تسلسل الفحص من إنشاء المجموعات حتى المحاكاة.افتح الصورة بالحجم الكامل ↗
خطة فحص يدوية أصلية؛ لم يُنفذ التشغيل هنا.
الملاحظةافحص أولاًالإجراء التالي
مجموعتان مختلفتان ما زالتا تتصادمانتعيين الجزأين وخلية المصفوفةتأكد من Workspace النشط
الصندوق يسقط خلال الأرضCanCollide والعلاقة مع Defaultافحص خصائص الأرض الفيزيائية
جزء في النموذج يتصرف بشكل مختلفCollisionGroup لكل BasePartعيّن الأجزاء المتبقية وأعد الفحص
السكربت لا يجد المجموعةالاسم ونتيجة التسجيلتحقق من الكتابة وسياق الخادم
عمل Touched عبر الجزءسلوك الحدث المنفصلتحقق من الحركة لإثبات الحاجز

تشخيص النتائج غير المتوقعة #

إذا استمر اللونان في التصادم، فتحقق بالترتيب من تعيين الجزأين إلى مجموعتين مختلفتين، وتعطيل علاقة المصفوفة، وفحص Workspace نفسه الذي عدلته. ثم تحقق من CanCollide ومن عدم بقاء أجزاء النموذج في Default.

إذا سقط صندوق عبر الأرض، فتحقق من علاقة مجموعته مع Default ومن CanCollide للأرض والصندوق. وإذا أبلغ السكربت عن مجموعة مجهولة، فقد لا يكون التسجيل قد حدث أو قد يختلف الاسم. تصدر CollisionGroupSetCollidable خطأ لمجموعة غير مسجلة، ولهذا يفحصها المثال ويسجلها أولاً.

أحداث Touched مسألة منفصلة: توضح وثائق Roblox أنها قد تعمل بصرف النظر عن CanCollide. لا تعتبر حدث اللمس وحده دليلاً على وجود حاجز فيزيائي.

تسجيل الملاحظة والمتابعة #

احفظ المصفوفة المختارة وقائمة الأجزاء المعينة وملاحظة قصيرة بالأزواج المفحوصة والسلوك المتوقع وما تمت ملاحظته. إذا غيرت المصفوفة فأعد فحص الأزواج المتأثرة، بما فيها التصادم مع Default.

يمكنك لاحقاً تعيين مجموعة لكل أجزاء النموذج عند إضافته أو اختبار الشخصيات أو مقارنة قاعدة المجموعة بـ NoCollisionConstraint. يحتاج كل توسع إلى فحصه الخاص. يتحقق الهدف حين تستطيع توقع النتيجة من المصفوفة ثم تأكيدها بتشغيل Studio.

المصادر الأصلية

Roblox Creator Hub — Collisions
Roblox Creator Hub — WorldRoot
Roblox Creator Hub — PhysicsService (legacy API status)
Roblox Creator Hub — Physics