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.
אתגר
קלתקן את המתודה של שער האגרה, ואז גבו את האגרה מהמכוניות.
- לחצו על "שחק": המסוף מציג שגיאה לגבי המתודה. שנו אותה ל־
void OnTriggerEnter(Collider other). - בתוך המתודה, כאשר
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)
{
// מכוניות משלמות אגרה; כל השאר עוברים בחינם
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין