Menu
CoddyTech

הפעלה

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 21 מתוך 63.

Invoke("Explode", 3f) קוראת פעם אחת למתודה של הסקריפט עצמו, Explode, בעוד 3 שניות, והקוד שאחריה ממשיך מיד. Unity מאתרת את המתודה לפי שמה, שמועבר כמחרוזת, והמתודה אינה מקבלת פרמטרים. הפצצה הזאת מתפוצצת 3 שניות אחרי שהמשחק מתחיל:

void Start()
{
    Invoke("Explode", 3f);
}

void Explode()
{
    Debug.Log("Boom");
    Destroy(gameObject);
}

מכיוון שהשם הוא מחרוזת, המהדר אינו יכול לבדוק אותו. Invoke("Explod", 3f) מתקמפל, וכעבור 3 שניות Unity רושמת ביומן את Trying to Invoke method: Bomb.Explod couldn't be called. במקום שהפצצה תתפוצץ. nameof של C# פותרת את הבעיה: nameof(Explode) היא המחרוזת "Explode", שהמהדר יוצר משם שהוא בדק, ולכן שגיאת הקלדה בתוכה גורמת לשגיאת קומפילציה שתופיע לפני שהמשחק פועל. יש לכתוב Invoke(nameof(Explode), 3f);.

challenge icon

אתגר

קל

הPlatform שבין שתי הבליטות מתפוררת. ה-Rigidbody שלה קינמטי, לכן היא תלויה באוויר. כתבו את הסקריפט Crumble שלה:

  • כשהשחקן נוחת עליה, היא ממתינה delay שניות (1 ב-Inspector), ואז נופלת.
  • הנפילה מתבצעת באמצעות מתודה בשם Fall: היא מפעילה את הפיזיקה של הפלטפורמה (isKinematic = false) ורושמת Crumble!.
  • לפני שהשחקן נוגע בה, הפלטפורמה נשארת במקומה.

השתמשו ב-nameof עבור שם המתודה. לחצו על Play והתקדמו אל הפלטפורמה בעזרת החצים, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class Crumble : MonoBehaviour
{
    public float delay = 1f;
    Rigidbody body;

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision collision)
    {
        // כשהשחקן נוחת: גרמו לפלטפורמה ליפול כעבור delay שניות
    }

    // Fall(): הפעילו את הפיזיקה של הפלטפורמה וכתבו ליומן Crumble!
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פיזיקה ומשחקיות