Menu
CoddyTech

OnCollisionEnter

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

כששני מתנגשים מתחילים לגעת זה בזה, Unity קוראת ל־OnCollisionEnter(Collision collision) בסקריפטים של שני האובייקטים. היא נקראת פעם אחת, בצעד הפיזיקה שבו המגע מתחיל, ולא שוב כל עוד הם נשארים במגע. כדי שתתרחש התנגשות, לפחות לאחד מהשניים צריך להיות Rigidbody שהפיזיקה מזיזה: קיר ורצפה ללא Rigidbody לעולם לא ידווחו זה לזה על שום דבר.

ארגז זה מתעד הודעה כשהוא נוחת. יש לו Rigidbody, ולכן הוא נופל, וההודעה מגיעה בצעד שבו הוא פוגש את הרצפה:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Thud!");
}

הארגז מתעד הודעה פעם אחת, ושוב רק אחרי שהוא עוזב את הרצפה ונוחת בפעם השנייה. גם הרצפה מקבלת את ההודעה: סקריפט עליה ישמע את הארגז נוחת, אף שלרצפה אין Rigidbody. השם והפרמטר חייבים להיות מדויקים. מתודה בשם onCollisionEnter לעולם לא תיקרא, ולא תופיע שגיאה. אם המתודה מקבלת Collider, Unity מתעדת Script error: OnCollisionEnter עם This message parameter has to be of type: Collision, ומתעלמת ממנה. כל עוד השניים נשארים במגע, Unity קוראת ל־OnCollisionStay בכל צעד פיזיקה, וכשהם נפרדים, היא קוראת ל־OnCollisionExit פעם אחת.

challenge icon

אתגר

קל

לוח הלחץ סופר את מה שנוחת עליו. ללוח אין Rigidbody; לארגז שמעליו יש Rigidbody והוא נופל עליו.

  • בכל פעם שמשהו מתחיל לגעת בלוח, הוסף 1 למונה ורשום זאת ביומן: Pressed 1, לאחר מכן Pressed 2 וכן הלאה.
  • משהו שנח על הלוח נספר פעם אחת, בלי קשר למשך הזמן שהוא נשאר עליו.

לחץ על Play וצפה ב-Console, ואז לחץ על Check.

נסו בעצמכם

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // ספרו כל נחיתה ורשמו אותה ביומן: Pressed 1, Pressed 2, ...
}
quiz iconבחנו את עצמכם

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

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