Menu
CoddyTech
flag Ar iconالعربيةdown icon

الدفع للخلف

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

الدفع الارتدادي هو ركلة تُبعد الجسم عمّا اصطدم به: دفعة واحدة على امتداد الخط من الجسم المصطدِم إلى الجسم المصطدَم به. هذا المصدّ يدفع ارتداديًا كل ما يصطدم به:

[SerializeField] private float power = 8f;

void OnCollisionEnter(Collision collision)
{
    Vector3 away = collision.transform.position - transform.position;
    away.y = 0f;
    collision.rigidbody.AddForce(away.normalized * power, ForceMode.Impulse);
}

يشير collision.transform.position - transform.position من المصدّ إلى الجسم الذي اصطدم به. تُضبط قيمة y إلى 0 لكي تبقى الركلة أفقية، وتجعل normalized مقدارها ثابتًا مهما كانت المسافة بين مركزي الجسمين. ForceMode.Impulse ركلة تحدث مرة واحدة: تغيّر السرعة بمقدار power مقسومًا على الكتلة، دفعة واحدة، لذا تنطلق كرة كتلتها 2 بنصف سرعة كرة كتلتها 1. أما ForceMode.Force الافتراضي، فهو مخصّص للتطبيق في كل خطوة، ويعطي مقدار خطوة واحدة، أي أقل 50 مرة.

لا تدوم الركلة إلا ما دام لا شيء يستبدل السرعة. اللاعب الذي يضبط rb.linearVelocity في FixedUpdate استنادًا إلى الأسهم في كل خطوة، يفقد أثرها بعد خطوة واحدة، لذا يجب على سكربت كهذا أن يترك السرعة كما هي للحظة بعد الاصطدام، أو أن يحرّك اللاعب باستخدام القوى.

challenge icon

التحدي

متوسط

يمكن للاعب إطلاق موجة صدمة. اكتب سكربت Shockwave على اللاعب. يتيح Inspector ضبط radius (4) وpower (6) وlift (2). سكربت Player جاهز: تحرّك الأسهم اللاعب.

  • عند الضغط على Space، اعثر على كل مصادم ضمن radius من اللاعب باستخدام Physics.OverlapSphere.
  • كل مصادم لديه Rigidbody، باستثناء اللاعب نفسه، يتلقى Impulse: power مباشرةً بعيدًا عن اللاعب عبر الأرض، بالإضافة إلى lift إلى الأعلى.
  • تُترك المصادمات التي لا تحتوي على Rigidbody، مثل الأرض، دون تغيير.

اضغط على Play، وتحرك بين الصناديق واضغط على Space، ثم Check.

جرّب بنفسك

using UnityEngine;

public class Shockwave : MonoBehaviour
{
    [SerializeField] private float radius = 4f;
    [SerializeField] private float power = 6f;
    [SerializeField] private float lift = 2f;

    void Update()
    {
        // عند الضغط على Space: ادفع كل Rigidbody ضمن radius بعيدًا عن اللاعب
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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