Menu
CoddyTech

التحطّم عند الاصطدام

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

ما مدى قوة الاصطدام؟ تمثل collision.relativeVelocity السرعة التي كان الجسمان يقتربان بها أحدهما من الآخر لحظة التقائهما، ويمثل magnitude مقدار سرعة الاصطدام بوحدة m/s. إنها الفرق بين السرعتين: تصطدم سيارة تسير بسرعة 10 m/s بسيارة تسير في الاتجاه نفسه بسرعة 8 m/s بسرعة 2 m/s فقط، وترصد السيارتان سرعة الاصطدام نفسها.

تتكسر هذه البيضة عندما تهبط بسرعة تتجاوز crackSpeed. إذا أُسقطت من ارتفاع 1 m، فستصطدم بسرعة تقارب 4.4 m/s (الجذر التربيعي لـ 2 x 9.81 x 1)، ومن ارتفاع 2 m بسرعة تقارب 6.3 m/s:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

لماذا لا نستخدم rb.linearVelocity الخاصة بالبيضة؟ عندما تُستدعى OnCollisionEnter، تكون الفيزياء قد عالجت الاصطدام بالفعل، لذا تكون سرعة البيضة هي السرعة المتبقية بعده، وتكون قريبة من الصفر. أما relativeVelocity فتحتفظ بسرعة الاصطدام نفسه. إنها سرعة، لذا لا تؤثر الكتلة فيها: فالبيضة الثقيلة والخفيفة اللتان تهبطان بسرعة 6 m/s تسجلان السرعة نفسها، وهي 6.

challenge icon

التحدي

سهل

اكتب Window.cs: تضعف النافذة مع كل اصطدام، وتتحطم عند 0.

  1. في OnCollisionEnter الخاص بالنافذة، اطرح collision.relativeVelocity.magnitude من strength.
  2. عندما تكون strength <= 0f، استدعِ Destroy(gameObject);.

اضغط على «العب»، وحرّك الكرات برفق باستخدام سهم الأعلى، ثم حرّك كرة بقوة باستخدام مفتاح المسافة: ستتحطم النافذة. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // كل ضربة تخصم سرعة اصطدامها من strength؛ وعندما تصل إلى 0 تتحطم النافذة
}

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

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