Menu
CoddyTech

OnCollisionEnter

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

כששני מתנגשים מתחילים לגעת זה בזה, 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

אתגר

קל

לוח הלחץ סופר את מה שנוחת עליו.

  1. הוסף שדה private int presses; אל PressurePlate.
  2. הוסף את void OnCollisionEnter(Collision collision): הוסף 1 אל presses ורשום ביומן "Pressed " + presses.

לחץ על "שחק": הארגז נוחת והמסוף מציג Pressed 1 פעם אחת. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

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

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

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