Menu
CoddyTech

OnTriggerEnter

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

void OnTriggerEnter(Collider other) מופעל פעם אחת, בצעד הפיזיקה שבו קוליידר אחר מתחיל לחפוף לטריגר. other הוא הקוליידר הזה, ולכן other.name, other.gameObject ו-other.CompareTag("Player") אומרים לך מה נכנס. Unity קוראת למתודה בסקריפטים של שני האובייקטים: בטריגר, other הוא האובייקט שנכנס, ובאובייקט שנכנס, other הוא הטריגר.

קו הסיום הזה מגיב לשחקן בלבד, ולכן כדור שמתגלגל וחוצה אותו לא רושם דבר:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log(other.name + " crossed the finish line");
    }
}

הפרמטר חייב להיות מסוג Collider. אם כותבים void OnTriggerEnter(Collision collision), הסקריפט עדיין מתקמפל, כי מבחינת C# זו מתודה רגילה. Unity בודקת את הפרמטר עצמו, רושמת Script error: OnTriggerEnter עם ההודעה This message parameter has to be of type: Collider, ולעולם לא קוראת למתודה. Collision שייך ל-OnCollisionEnter, שבו שני גופים מוצקים נפגשים בנקודת מגע. לטריגר אין מגע לדווח עליו, רק קוליידר, ולכן הוא מקבל Collider.

challenge icon

אתגר

קל

כלי רכב נוסעים דרך השער, שהוא אזור הפעלה. הסקריפט Driver מזיז אותם והוא מוכן. כתבו את הסקריפט TollGate של השער:

  • כל כלי רכב שמתויג Car משלם toll (3): הוסיפו אותו ל-collected והדפיסו את הסכום הכולל, Toll: 3 עבור המכונית הראשונה, ואז Toll: 6.
  • כל דבר אחר, כמו רוכב האופניים, עובר בחינם ולא מדפיס דבר.

לחצו תחילה על Play: המסוף כבר מציג שגיאת סקריפט לגבי המתודה כפי שהיא כתובה. תקנו אותה, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class TollGate : MonoBehaviour
{
    public int toll = 3;
    int collected;

    void OnTriggerEnter(Collision collision)
    {
        // מכוניות משלמות אגרה; כל דבר אחר עובר בחינם
    }
}
quiz iconבחנו את עצמכם

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

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