Menu
CoddyTech

الدفع باستخدام AddForce

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

بمجرد أن يصبح للكائن مكوّن Rigidbody، تتولى الفيزياء تحريكه، لذا توقّف عن تغيير موضعه وادفعه بدلًا من ذلك. تدفع rb.AddForce(force) الجسم بقوة، وهي Vector3 بوحدة النيوتن. القوة لا تحدد سرعة: بل تزيد سرعة الجسم ما دمت تواصل إضافتها، بمقدار القوة مقسومة على الكتلة في كل ثانية. توقّف عن الدفع، وسيواصل الجسم الحركة بالسرعة التي اكتسبها.

لدى هذه الحوامة (2 kg) دافع: ما دامت ضغطة السهم للأعلى مستمرة، تدفعها قوة مقدارها thrust إلى الأمام، على محور +z. إذا كانت قيمة الدفع 12، تكتسب سرعة مقدارها 12 / 2 = 6 m/s كل ثانية:

public float thrust = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        rb.AddForce(Vector3.forward * thrust);
    }
}

تُطبَّق القوى داخل FixedUpdate()، التي تستدعيها Unity قبل كل خطوة فيزيائية، بمعدل 50 مرة في الثانية (يوضح الدرس 4 السبب). لا توجد Time.deltaTime في السطر: فالدالة AddForce توزّع القوة على الخطوة بالفعل، وضربها في Time.deltaTime سيجعل الدفع أضعف 50 مرة. وعلى الأرض، يدفع الاحتكاك في الاتجاه المعاكس، لذا قد لا تحرك قوة صغيرة صندوقًا ثقيلًا إطلاقًا.

challenge icon

التحدي

سهل

ادفع القرص حول الحلبة الخالية من الاحتكاك باستخدام القوى.

  1. في FixedUpdate()، اقرأ float h = Input.GetAxis("Horizontal"); وfloat v = Input.GetAxis("Vertical");.
  2. استدعِ rb.AddForce(new Vector3(h, 0, v) * push);، من دون Time.deltaTime.

اضغط على «العب»، وادفع القرص ثم اتركه: سيواصل الانزلاق. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // ادفع القرص: أفقيًا على طول x، وعموديًا على طول z
    }
}

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

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