الارتداد
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 57 من 71.
الدفع الارتدادي هو ركلة تبعد الجسم عمّا اصطدم به: دفعة واحدة على امتداد الخط من الجسم المصطدم إلى الجسم الذي تلقّى الاصطدام. هذا المصدّ يدفع ارتداديًا كل ما يصطدم به:
[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 يفقد تأثيرها بعد خطوة واحدة، لذا يجب على نص برمجي كهذا أن يترك السرعة دون تغيير للحظة بعد الاصطدام، أو أن يحرّك اللاعب باستخدام القوى.
التحدي
متوسطاجعل اللاعب يُطلق موجة صادمة باستخدام مفتاح المسافة.
- عند
Input.GetKeyDown(KeyCode.Space)، كرّر الحلقةforeach (Collider hit in Physics.OverlapSphere(transform.position, radius))، مع تخطي مُصادم اللاعب نفسه. - لكل
hit.TryGetComponent(out Rigidbody body)، احسبaway = hit.transform.position - transform.positionمعaway.y = 0f. - استدعِ
body.AddForce(away.normalized * power + Vector3.up * lift, ForceMode.Impulse);.
اضغط على «العب» واضغط على مفتاح المسافة بين الصناديق. ثم اضغط على «تحقق».
جرّب بنفسك
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 بعيدًا عن اللاعب
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity