Menu
CoddyTech

OnTriggerEnter

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

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

אתגר

קל

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

  1. לחצו על "שחק": המסוף מציג שגיאה לגבי המתודה. שנו אותה ל־void OnTriggerEnter(Collider other).
  2. בתוך המתודה, כאשר other.CompareTag("Car"), הוסיפו את toll אל collected והציגו ביומן את "Toll: " + collected. רוכב האופניים עובר בחינם.

לחצו על "שחק": המסוף מציג Toll: 3, ואז Toll: 6. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;

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

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

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

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