OnCollisionEnter
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 8 من 63.
عندما يبدأ مصادمان بالتلامس، تستدعي Unity الدالة OnCollisionEnter(Collision collision) في البرامج النصية لكلا الجسمين. تُستدعى مرة واحدة، في خطوة الفيزياء التي يبدأ فيها التلامس، وليس مجددًا أثناء بقائهما متلامسين. ولكي يحدث تصادم أصلًا، يجب أن يمتلك أحد الجسمين على الأقل مكوّن Rigidbody تحرّكه الفيزياء: فالجدار والأرضية اللذان لا يمتلكان Rigidbody لا يبلّغ أحدهما الآخر بأي شيء.
يسجّل هذا الصندوق رسالة عند هبوطه. لديه مكوّن Rigidbody، لذا يسقط، وتصل الرسالة في الخطوة التي يلامس فيها الأرضية:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Thud!");
}يسجّل الصندوق الرسالة مرة واحدة، ثم لا يسجّلها مجددًا إلا بعد أن يغادر الأرضية ويهبط مرة ثانية. وتتلقى الأرضية الرسالة أيضًا: فالبرنامج النصي المثبّت عليها سيتلقى إشعارًا بهبوط الصندوق، مع أن الأرضية لا تمتلك مكوّن Rigidbody. يجب أن يكون الاسم والمعامل مطابقين تمامًا. لن تُستدعى أبدًا دالة باسم onCollisionEnter، ولن يظهر أي خطأ. أما الدالة التي تأخذ Collider، فستجعل Unity تسجّل Script error: OnCollisionEnter مع This message parameter has to be of type: Collision، وتتجاهلها. ما دام الجسمان متلامسين، تستدعي Unity الدالة OnCollisionStay في كل خطوة فيزيائية، وعندما يفترقان، تستدعي OnCollisionExit مرة واحدة.
التحدي
سهلتحسب لوحة الضغط ما يسقط عليها. لا تحتوي اللوحة على Rigidbody؛ أما الصندوق الموجود فوقها فيحتوي عليه ويسقط عليها.
- في كل مرة يبدأ فيها شيء بملامسة اللوحة، أضف 1 إلى العدد وسجّله:
Pressed 1، ثمPressed 2، وهكذا. - يُحتسب الشيء المستقر على اللوحة مرة واحدة، مهما طالت مدة بقائه.
اضغط تشغيل وراقب وحدة التحكم، ثم اضغط تحقّق.
جرّب بنفسك
using UnityEngine;
public class PressurePlate : MonoBehaviour
{
// احسب كل هبوط وسجّله في السجل: Pressed 1, Pressed 2, ...
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق