הפניות עדיפות על Find
חלק מהיחידה יסודות התכנות ב-Unity במסלול ה-Unity של Coddy. שיעור 45 מתוך 67.
סקריפט יכול להגיע לאובייקט אחר בארבע דרכים: שדה שמוגדר ב-Inspector, חיפוש לפי שם באמצעות GameObject.Find, חיפוש לפי תג, או חיפוש לפי סוג באמצעות FindAnyObjectByType. עבור אובייקט שנמצא בסצנה מההתחלה, קוד Unity משתמש בשדה Inspector, משלוש סיבות:
- מהירות. ההפניה מוגדרת לפני שהמשחק מתחיל. כל חיפוש עובר על האובייקטים בסצנה, וחיפוש בתוך
Update()עושה זאת בכל פריים. - בטיחות. שם בתוך מחרוזת מפסיק לעבוד כשמישהו משנה את שם האובייקט: Find מחזירה
nullוהשגיאה מופיעה מאוחר יותר, בשורה שבה משתמשים בו. שדה Inspector ריק גורם ל-UnassignedReferenceException, שמציינת את שם השדה והסקריפט. - בהירות. ה-Inspector מציג במה הסקריפט תלוי. קריאת Find מסתירה זאת בתוך הקוד.
// מוגדר פעם אחת ב-Inspector: אין חיפוש, ושינוי שם לא משנה דבר
[SerializeField] private Transform door;
// מתבצע חיפוש בכל פריים, והערך הוא null לאחר ששמה של הדלת משתנה
void Update()
{
Transform d = GameObject.Find("Door").transform;
}לחיפושים יש מקום: אובייקטים שקיימים רק כשהמשחק רץ, כמו אובייקט שנוצר במהלך המשחק, וסקריפטים שחייבים לעבוד בכל סצנה. גם אז, חפשו פעם אחת ב-Start() ושמרו את התוצאה בשדה.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות התכנות ב-Unity
1הסקריפט הראשון שלך
שלום, Unityהצב את הקובייהזוז בכל פרייםהסתובב בכל שנייהנווט בעזרת המקשיםסיכום: נהג בקובייה4וקטורים
חיבור וקטוריםכיווניםמרחב מקומי ומרחב עולמימהירות אלכסוניתהמרחק בין עצמיםVector3 הוא מבנה נתוניםסיכום: הטסת רחפן10מחזור החיים של הסקריפט
Awake ו-StartUpdate ו-LateUpdateOnEnable ו-OnDisableסדר מחזור החייםסיכום: מתעד מחזור החיים8איתור דברים
חיפוש לפי שםתגיותחיפוש לפי סוגהפניות עדיפות על Findה-Null של Unityסיכום: המטבע הקרוב ביותר