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