רכיבים חסרים
חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 45 מתוך 85.
כאשר הרכיב שביקשת אינו נמצא באובייקט, 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: דאג לכך שמקש Space ידלג עליו, והצג שהוא מקולקל.
- ב־
Start(), החלף את שורתGetComponentב־hasBulb = TryGetComponent(out bulb);, והוסף שדהbool hasBulb;. - כאשר
hasBulbהוא false, צבע את המנורה:GetComponent<Renderer>().material.color = Color.gray;. - ב־
Update(), החלף את מצב האור רק כאשרhasBulbהוא true.
לחץ על "שחק" ואז על Space: המנורות התקינות יחליפו מצב, ללא שגיאה. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
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יסודות C# ב-Unity
שלום, Unityמשתניםמספרים עשרוניים צריכים fטקסט ב-Consoleמשתנים ששומרים ערכיםאם ואחרתהשוואת מספריםחזרה: אוסף המטבעות5וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן8אובייקטי משחק ורכיבים
הפניות ב-Inspectorקבלת רכיברכיבים חסריםהוספת רכיבRequireComponentהצגה והסתרהחזרה: מתג תאורה6טרנספורמציות והיררכיה
הורים וילדיםלהניף את הדגלקנה מידהלהסתכל על דבריםלנוע לעבר נקודהסיכום: הירח המקיף12מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: יומן מחזור החייםתרגלו בעצמכם: Unity אונליין