الارتداد والاحتكاك
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 12 من 63.
يعتمد ارتداد المصادم وانزلاقه على PhysicsMaterial (الاسم في Unity 6؛ وكانت الإصدارات الأقدم تسميه PhysicMaterial). تتراوح قيمة bounciness من 0 (من دون ارتداد) إلى 1 (يحتفظ بكل سرعته). تعمل dynamicFriction على إبطاء الجسم المنزلق، وتحدد staticFriction مقدار القوة اللازمة لدفع جسم ساكن قبل أن يبدأ بالانزلاق. يتصرف المصادم الذي لا يملك مادة كما لو أن احتكاكه 0.6 وارتداده 0. تمنح هذه الكرة فائقة الارتداد مصادمها مادةً ارتدادية خاصة بها:
void Start()
{
PhysicsMaterial mat = GetComponent<Collider>().material; // النسخة الخاصة بهذا المصادم
mat.bounciness = 0.9f;
mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}يتضمن التلامس مصادمين، لذا تجمع Unity قيمتيهما. تحدد كل مادة كيفية الجمع، باستخدام bounceCombine للارتداد وfrictionCombine للاحتكاك، ويأخذ كل منهما أحد أربعة أوضاع: Average (الافتراضي)، أو Minimum، أو Multiply، أو Maximum. عندما يطلب المصادمان وضعين مختلفين، يفوز الوضع المذكور لاحقًا في هذه القائمة. على أرضية بلا مادة، سيعطي Average الكرة (0.9 + 0) / 2 = 0.45. أما مع Maximum، فتحتفظ الكرة بنسبة 0.9 من سرعتها عند كل ارتداد، ما يعادل 0.9 x 0.9 = 81% من ارتفاعها، لأن الارتفاع يتناسب مع مربع السرعة.
تمنح .material هذا المصادم نسخة خاصة به من مادته، لذا تؤثر التغييرات فيه وحده. أما .sharedMaterial فهي أصل المادة نفسه، المشترك بين كل المصادمات التي تستخدمه، وتكون null في المصادم الذي لم تُعيَّن له مادة قط.
التحدي
سهلامنح ساحة اللعب أسطحها. يوجد النص البرمجي Surface على الترامبولين الأزرق (bounce 0.8، وfriction 0.6) وعلى شريط الجليد (bounce 0، وfriction 0.1). لا تملك الكرة والصندوق مواد خاصة بهما.
- في
Start()، عيّن مادة المصادم الخاص بهذا السطح إلىbounceوfriction(للاحتكاك الديناميكي والثابت على حد سواء). - كل ما يهبط على سطح يجب أن يرتد باستخدام قيمة
bounceالكاملة لذلك السطح، وكل ما ينزلق عليه يجب أن يستخدم قيمةfrictionالخاصة بالسطح، لا أن يمزجها مع القيمة 0.6 للأشياء التي لا تملك مادة.
اضغط على Play لمشاهدة الكرة وهي ترتد، ثم اضغط على Check: سيؤدي ذلك أيضًا إلى انزلاق الصندوق عبر الجليد.
جرّب بنفسك
using UnityEngine;
public class Surface : MonoBehaviour
{
public float bounce = 0f;
public float friction = 0.6f;
void Start()
{
// امنح هذا المصادم مادته الخاصة مع الارتداد والاحتكاك
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق2التصادمات
OnCollisionEnterماذا اصطدمتُ به؟التحطّم عند الاصطدامالوقوف على الأرضالارتداد والاحتكاكأشكال المصادماتمراجعة: جدار قابل للكسر