Menu
CoddyTech

רכיבים חסרים

חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 31 מתוך 67.

כשהרכיב שביקשת אינו נמצא על האובייקט, GetComponent לא עוצר אותך. בעורך הוא מחזיר תחליף שמשתווה ל־null, ו־Unity זורק חריגה בפעם הראשונה שהקוד שלך משתמש בו. הכדור הזה אמור לקפוץ כשלוחצים על Space, אבל אף אחד לא הוסיף לו Rigidbody:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * 300f);
    }
}

לחיצה על Space מציגה את ההודעה MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. ההודעה מציינת את הסוג החסר ואת האובייקט. אפשר להוסיף את הרכיב דרך ה־Inspector, או, אם ייתכן שהאובייקט לא כולל אותו בכוונה, לבדוק קודם. TryGetComponent(out rb) מחזירה true וממלאת את rb כשהרכיב נמצא, ומחזירה false בלי שגיאה כשהוא לא נמצא (out מאפשר למתודה להחזיר ערך באמצעות המשתנה):

bool canHop;

void Start()
{
    canHop = TryGetComponent(out rb);
}

לאחר מכן, Update() דוחפת את הכדור רק if (canHop). מחוץ לעורך, במשחק שנבנה, GetComponent מחזירה במקום זאת null רגיל, ולכן אותה טעות תופיע שם בתור NullReferenceException.

challenge icon

אתגר

בינוני

מקש הרווח מדליק ומכבה את פנסי הרחוב, אבל הנורה של Lamp2 שבורה: אין לה Light, ולחיצה על מקש הרווח גורמת לעצירה עם MissingComponentException. תקן את הסקריפט:

  • פנסים שיש להם Light עדיין נדלקים ונכבים באמצעות מקש הרווח.
  • פנס ללא Light לעולם לא נוגע בו, ולכן לא מתרחשת שגיאה.
  • כשהמשחק מתחיל, פנס ללא Light צובע את הנורה שלו ב־Color.gray, כך שהשחקנים יכולים לראות שהיא שבורה.

לחץ על Play, ואז על מקש הרווח כדי לראות את השגיאה. תקן אותה, ואז לחץ על Check.

נסו בעצמכם

using UnityEngine;

public class LampSwitch : MonoBehaviour
{
    Light bulb;

    void Start()
    {
        bulb = GetComponent<Light>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            bulb.enabled = !bulb.enabled;
        }
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות התכנות ב-Unity