Menu
CoddyTech

الارتداد والاحتكاك

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 12 من 71.

تعتمد طريقة ارتداد المُصادِم وانزلاقه على 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 للمُصادِم الذي لم تُعيّن له مادة قط.

challenge icon

التحدي

سهل

امنح الترامبولين والجليد قيمتي ارتداد واحتكاك خاصتين بهما.

  1. في Start()، استخدم PhysicsMaterial mat = GetComponent<Collider>().material; واضبط mat.bounciness = bounce; وmat.dynamicFriction وmat.staticFriction على friction.
  2. اضبط mat.bounceCombine = PhysicsMaterialCombine.Maximum; وmat.frictionCombine = PhysicsMaterialCombine.Minimum;، لكي تكون الأولوية للقيم الخاصة بالسطح.

اضغط على «العب»: سترتد الكرة عاليًا عن الترامبولين. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // امنح هذا المصادم مادة خاصة به مع قيمتي الارتداد والاحتكاك
    }
}

جميع دروس الفيزياء وأسلوب اللعب

تدرّب بنفسك: Playground لـ Unity