Menu
CoddyTech

الدخول والخروج

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

يرسل المُحفِّز رسالتين إضافيتين. تعمل OnTriggerExit(Collider other) مرة واحدة، في خطوة الفيزياء التي ينتهي فيها التداخل، أيًّا كانت طريقة انتهائه. وتعمل OnTriggerStay(Collider other) في كل خطوة فيزياء ما دام التداخل قائمًا، بمعدل 50 مرة في الثانية افتراضيًا، مثل FixedUpdate(). وتتلقى الدوال الثلاث كلها Collider نفسه.

يرفع هذا التيار الهوائي الصاعد كل ما يطفو داخله، ويُبلّغ عند مغادرته:

public float lift = 15f;

void OnTriggerStay(Collider other)
{
    other.attachedRigidbody.AddForce(Vector3.up * lift);
}

void OnTriggerExit(Collider other)
{
    Debug.Log(other.name + " left the updraft");
}

يجب تطبيق القوة ضمن خطوة فيزياء، لذا فإن OnTriggerStay مناسب لها: يُطبَّق الدفع مرة واحدة في كل خطوة طوال بقاء الكرة في الداخل، ويتوقف لحظة مغادرتها. لا يحتوي التيار الهوائي الصاعد على Rigidbody، لذا يجب أن يكون لدى كل زائر واحد، ولا تكون قيمة attachedRigidbody أبدًا null هنا. ولتحديد مقدار لكل ثانية داخل OnTriggerStay، اضرب في Time.deltaTime، وهي مدة الخطوة أثناء خطوة الفيزياء، أي 0.02. ينتج عن كل دخول استدعاء واحد لـ OnTriggerEnter، ثم لاحقًا استدعاء واحد لـ OnTriggerExit للمُصادِم نفسه.

challenge icon

التحدي

سهل

أضئ المصباح ما دام هناك أي شيء في منطقة التحميل.

  1. أضف حقلًا int inBay;. في Start()، عيّن lamp.enabled = false;.
  2. في OnTriggerEnter، أضف 1 إلى inBay وعيّن lamp.enabled = true;.
  3. في OnTriggerExit، اطرح 1 من inBay، وأطفئ المصباح فقط عندما تصبح قيمته 0.

اضغط على «العب» وادفع الصناديق إلى الداخل والخارج: سيبقى المصباح مضاءً حتى تصبح منطقة التحميل فارغة. ثم اضغط على «تحقق».

جرّب بنفسك

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // يظل المصباح مضاءً ما دام هناك شيء في منطقة التحميل، وينطفئ عندما تكون فارغة
}

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

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