מתודות הרחבה
חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 42 מתוך 64.
Vector3 ו-Transform שייכים ל-Unity, ולכן אי אפשר להוסיף להם מתודה. מתודת הרחבה היא מתודה סטטית ש-C# מאפשרת לקרוא לה כאילו הייתה שלהם. שתי המתודות האלה חוסכות שורות שחוזרות בכל פרויקט:
public static class UnityExtensions
{
public static Vector3 WithY(this Vector3 v, float y)
{
return new Vector3(v.x, y, v.z);
}
public static void DestroyChildren(this Transform parent)
{
foreach (Transform child in parent)
{
Object.Destroy(child.gameObject);
}
}
}// בכל סקריפט
transform.position = transform.position.WithY(0.5f);
inventoryPanel.DestroyChildren();שלושה דברים מרכיבים מתודת הרחבה: מחלקה סטטית שאינה מקוננת ואינה גנרית, מתודה סטטית, ו-this לפני הפרמטר הראשון. הפרמטר הזה הוא הערך שמשמאל לנקודה, ולכן transform.position.WithY(0.5f) מתקמפל ל-UnityExtensions.WithY(transform.position, 0.5f). Vector3 הוא מבנה, ולכן v הוא עותק: WithY לא יכולה לשנות את הווקטור של הקוד הקורא, ובמקום זאת מחזירה וקטור חדש. כך גם אפשר לעקוף את transform.position.y = 0.5f;, שאינו מתקמפל.
המחלקה הסטטית אינה MonoBehaviour. היא נמצאת בקובץ .cs משלה; כל שם יתאים, והיא אף פעם לא מתווספת לאובייקט. עבור מתודות ש-MonoBehaviour יורשת, כמו Destroy, צריך לציין כאן את המחלקה שלהן: Object.Destroy. בטוח להשמיד ילדים בתוך foreach, כי Unity מסירה אותם רק בסוף הפריים.
אתגר
בינוניתן לינשוף שתי מתודות הרחבה.
- ב־
FlatExtensions, הוסףFlatDistance(this Vector3 a, Vector3 b)סטטית ציבורית: המרחק בלי הגובה,5מ־(0, 5, 0) אל (3, 0, 4). - בדומה לכך,
FaceFlat(this Transform t, Vector3 target)מסובבת אתtרק סביב ציר y. - ב־
Owl, הפנה את המבט אל השחקן באמצעות FaceFlat;eyesדולקות כל עוד FlatDistance קטן מ־sight.
לחץ על "שחק" והלך מתחת לינשוף: עיניו יזהרו. ואז לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public static class FlatExtensions
{
// FlatDistance (Vector3) ו-FaceFlat (Transform) יופיעו כאן
}
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווחתרגלו בעצמכם: Unity אונליין