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

مُصادِمات المُحفِّز

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

لم يعد المصادم الذي تم تحديد Is Trigger له صلبًا: تمر الأجسام الصلبة عبره مباشرةً، ويبلّغ Unity عن التداخل بدلًا من ذلك، باستدعاء OnTriggerEnter في نصوص كلا الجسمين. خطوط النهاية والعناصر القابلة للالتقاط ومناطق الخطر هي مُشغِّلات. في الشيفرة، يمثّل مربع الاختيار الخاص بالمصادم خاصية isTrigger.

تضبط منطقة الإنذار في هذا القبو المصادم ليصبح مُشغِّلًا عند بدء اللعبة، وهذا يعادل تحديد مربع الاختيار، وتُطلق الإنذار عندما يدخل حارس إليها:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

تتبع المُشغِّلات القاعدة نفسها التي تتبعها التصادمات: لا يتحقق Unity من زوج إلا إذا كان أحد الجسمين على الأقل يحتوي على Rigidbody. الجسمان اللذان لا يحتوي أيٌّ منهما على واحد لا يبلّغ أحدهما عن الآخر مطلقًا، سواء أكان مُشغِّلًا أم لا. تقوم نصوص برمجية بدورية الحراس، لذلك يحتوي كل حارس على Rigidbody حركي (Add Component، ثم Rigidbody، مع تحديد Is Kinematic): لا تؤثر فيه الجاذبية والاصطدامات، ومع ذلك يظل يُحتسب Rigidbody. من دون Rigidbodies للحراس، سيمر الحارس عبر المنطقة وستظل وحدة التحكم فارغة. ومن دون isTrigger، تكون المنطقة صندوقًا صلبًا، والجسم الحركي لا يلامس مطلقًا مصادمًا لا يحتوي على Rigidbody، لذا لن يُسجَّل شيء مرة أخرى. يكفي وجود Rigidbody واحد في الزوج، على أيٍّ من الجسمين. يتناول الدرس التالي other، أي المصادم الذي دخل.

challenge icon

التحدي

سهل

ينبغي أن يطير Drone عبر مسار يمر بثلاث حلقات، وينبغي أن تسجّل كل Ring اسمها وpassed بينما يمرّ بها الدرون، على سبيل المثال Ring1 passed. لا شيء يعمل حتى الآن: يحرّك البرنامج النصي للدرون الدرون باستخدام MovePosition، لكن لا يوجد في المشهد أي Rigidbody، والحلقات صلبة.

  • في Drone.cs، أضف Rigidbody إلى الدرون عند بدء اللعبة واحتفظ به في body. يجب أن يطير الدرون مستويًا على طول مساره. جسم واحد على الدرون يكفي للتعامل مع الحلقات الثلاث.
  • في Ring.cs، اجعل مصادم كل حلقة مُشغّلًا عند بدء اللعبة.

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

جرّب بنفسك

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // اجعل مصادم هذه الحلقة مشغّلًا
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}
quiz iconاختبر نفسك

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

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