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

OnEnable وOnDisable

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 57 من 67.

تُنفَّذ OnEnable() في كل مرة يصبح فيها البرنامج النصي نشطًا: عند ظهور الكائن لأول مرة (مباشرةً بعد Awake())، ومرة أخرى كلما أُظهر الكائن باستخدام SetActive(true) أو أُعيد تشغيل البرنامج النصي باستخدام enabled = true. وتُنفَّذ OnDisable() في كل مرة يُخفى فيها الكائن، أو يُوقف فيها البرنامج النصي، أو يُدمَّر فيها الكائن.

يمكن لبوابة يفتحها برنامج نصي آخر ويغلقها باستخدام SetActive أن تسجّل حالتها بنفسها:

void OnEnable()
{
    Debug.Log("Portal open");
}

void OnDisable()
{
    Debug.Log("Portal closed");
}

تسجّل البوابة Portal open عند بدء المشهد. ويؤدي إخفاؤها ثم إظهارها مرة أخرى إلى تسجيل Portal closed، ثم Portal open، بينما لا يُعاد تنفيذ Awake() وStart() مرة ثانية. لذا، يوضع في OnEnable() أي كود يجب تنفيذه عند كل ظهور، مثل إعادة ضبط مؤقّت أو عدّ مرات الزيارة. وعندما تكون البوابة مخفية، لا يُنفَّذ Update() الخاص بها، ولهذا يتولى برنامج نصي على كائن آخر فتحها وإغلاقها.

challenge icon

التحدي

متوسط

يوجد النص البرمجي Switchable على Player وعلى درعه، Bubble، الذي يبدأ مخفيًا. على Player، يشير target إلى Bubble، ويؤدي الضغط على Space إلى تشغيل Bubble وإيقافه؛ هذا الجزء مكتوب بالفعل.

اجعل كل Switchable يُبلّغ عن نفسه:

  • في كل مرة يتم تشغيله، أضف 1 إلى عدّاد وسجّل اسمه وon والعدّاد بين قوسين، على سبيل المثال Bubble on (2)؛
  • في كل مرة يتم إيقافه، سجّل اسمه وoff: Bubble off.

عند بدء اللعبة، يسجّل Player Player on (1): فهو أيضًا يكون قيد التشغيل. اضغط على Play، واضغط Space بضع مرات، ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;

public class Switchable : MonoBehaviour
{
    public GameObject target;

    void Update()
    {
        if (target != null && Input.GetKeyDown(KeyCode.Space))
        {
            target.SetActive(!target.activeSelf);
        }
    }

    // في كل مرة يُشغَّل فيها هذا الكائن: احسب عدد مرات تشغيله وسجّل "<name> on (<count>)"
    // في كل مرة يُوقَف فيها تشغيله: سجّل "<name> off"
}
quiz iconاختبر نفسك

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

جميع دروس أساسيات البرمجة النصية في Unity