الدفع باستخدام AddForce
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 2 من 63.
بمجرد أن يصبح للكائن مكوّن 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 مرة. وعلى الأرض، يدفع الاحتكاك في الاتجاه المعاكس، لذا قد لا تحرّك قوة صغيرة صندوقًا ثقيلًا إطلاقًا.
التحدي
سهلتحتوي قطعة القرص على حلبة التزلج على الجليد على مكوّن Rigidbody، ولا يوجد احتكاك على الجليد. ادفعها باستخدام الأسهم: يدفعها المحور Horizontal على طول x، والمحور Vertical على طول z، بقوة مقدارها push (4 في Inspector).
ادفعها باستخدام القوى فقط، حتى تواصل الانزلاق عند إفلاتها. اضغط على تشغيل، ووجّه القرص حول الحلبة، ثم اضغط على تحقّق.
جرّب بنفسك
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// ادفع القرص: أفقيًا على طول x، وعموديًا على طول z
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق