Menu
CoddyTech

להישבר בעת פגיעה

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

כמה חזקה הייתה הפגיעה? collision.relativeVelocity מציין כמה מהר שני העצמים התקרבו זה לזה ברגע שהם נפגשו, וה־magnitude שלו הוא מהירות הפגיעה במ׳/ש׳. זהו הפרש בין מהירויות: מכונית שנוסעת במהירות 10 מ׳/ש׳ ופוגעת במכונית שנוסעת באותו כיוון במהירות 8 מ׳/ש׳ פוגעת במהירות של 2 מ׳/ש׳ בלבד, ושתי המכוניות חוות את אותה מהירות פגיעה.

הביצה הזאת נשברת כשהיא נוחתת במהירות גבוהה מ־crackSpeed. כשמפילים אותה מגובה 1 m, היא פוגעת במהירות של כ־4.4 m/s (השורש הריבועי של 2 x 9.81 x 1), ומגובה 2 m במהירות של כ־6.3 m/s:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

למה לא להשתמש ב־rb.linearVelocity של הביצה? עד ש־OnCollisionEnter מופעלת, מערכת הפיזיקה כבר טיפלה בפגיעה, ולכן מהירות הביצה היא המהירות שנותרה אחריה, והיא קרובה לאפס. relativeVelocity שומרת את מהירות הפגיעה עצמה. זו מהירות, ולכן למסה אין השפעה: ביצה כבדה וביצה קלה שנוחתות במהירות של 6 m/s ידווחו שתיהן על אותה מהירות, 6.

challenge icon

אתגר

קל

הכדור מתגלגל אל החלון: מקש החץ למעלה מגלגל אותו בעדינות, ומקש הרווח מגלגל אותו בעוצמה (Bowler.cs, כבר נכתב). כתבו את Window.cs. לחלון יש strength (10 בחלון Inspector).

  • כל פגיעה מחלישה את החלון לפי מהירות הפגיעה שלה: פגיעה במהירות 2 m/s מפחיתה 2 מ-strength.
  • כאשר strength מגיע ל-0 או פחות, החלון מתנפץ: השמידו את החלון.

לחצו על Play, גלגלו כמה כדורים בעדינות ואז אחד בעוצמה, ולאחר מכן לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // כל פגיעה מפחיתה מ-strength את מהירות הפגיעה שלה; כשהערך מגיע ל-0, החלון מתנפץ
}
quiz iconבחנו את עצמכם

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

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