Menu
CoddyTech

מתודות הרחבה

חלק מהיחידה ארכיטקטורת משחקים ב-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 מסירה אותם רק בסוף הפריים.

challenge icon

אתגר

בינוני

תן לינשוף שתי מתודות הרחבה.

  1. ב־FlatExtensions, הוסף FlatDistance(this Vector3 a, Vector3 b) סטטית ציבורית: המרחק בלי הגובה, 5 מ־(0, 5, 0) אל (3, 0, 4).
  2. בדומה לכך, FaceFlat(this Transform t, Vector3 target) מסובבת את t רק סביב ציר y.
  3. ב־Owl, הפנה את המבט אל השחקן באמצעות FaceFlat; eyes דולקות כל עוד FlatDistance קטן מ־sight.

לחץ על "שחק" והלך מתחת לינשוף: עיניו יזהרו. ואז לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public static class FlatExtensions
{
    // FlatDistance (Vector3) ו-FaceFlat (Transform) יופיעו כאן
}

כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity

תרגלו בעצמכם: Unity אונליין