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