Menu
CoddyTech

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