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() שלו לא פועלת, וזו הסיבה שהפתיחה והסגירה נעשות באמצעות סקריפט על אובייקט אחר.
אתגר
בינוניהסקריפט 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"
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים