Menu
CoddyTech

ניתור וחיכוך

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

האופן שבו מתנגש קופץ ומחליק נקבע לפי ה־PhysicsMaterial שלו (כך הוא נקרא ב־Unity 6; בגרסאות ישנות יותר הוא נקרא PhysicMaterial). bounciness נע בין 0 (ללא קפיצה) ל־1 (שומר על כל המהירות שלו). dynamicFriction מאט גוף שמחליק, ו־staticFriction קובע כמה חזק צריך לדחוף גוף במנוחה לפני שהוא מתחיל להחליק. מתנגש ללא חומר מתנהג כאילו החיכוך שלו הוא 0.6 וה־bounciness שלו הוא 0. כדור הקפיצה הזה מעניק למתנגש שלו חומר קופצני משלו:

void Start()
{
    PhysicsMaterial mat = GetComponent<Collider>().material;   // העותק העצמי של ה-collider הזה
    mat.bounciness = 0.9f;
    mat.bounceCombine = PhysicsMaterialCombine.Maximum;
}

במגע משתתפים שני מתנגשים, ולכן Unity משלבת את שני הערכים שלהם. כל חומר בוחר כיצד לעשות זאת, באמצעות bounceCombine עבור bounciness ו־frictionCombine עבור חיכוך, ולכל אחד מארבעה מצבים: Average (ברירת המחדל), Minimum, Multiply או Maximum. כששני המתנגשים מבקשים מצבים שונים, המצב שמופיע מאוחר יותר ברשימה הוא שקובע. על רצפה ללא חומר, Average ייתן לכדור (0.9 + 0) / 2 = 0.45. עם Maximum, הכדור שומר על 0.9 מהמהירות שלו בכל קפיצה, כלומר על 0.9 x 0.9 = 81% מהגובה שלו, מכיוון שהגובה משתנה ביחס לריבוע המהירות.

.material נותן למתנגש עותק משלו של החומר שלו, כך שהשינויים משפיעים רק עליו. .sharedMaterial הוא נכס החומר עצמו, המשותף לכל מתנגש שמשתמש בו, והוא null במתנגש שמעולם לא הוקצה לו חומר.

challenge icon

אתגר

קל

תנו לעורך האונליין את המשטחים שלו. הסקריפט Surface נמצא על הטרמפולינה הכחולה (bounce 0.8, friction 0.6) ועל רצועת הקרח (bounce 0, friction 0.1). לכדור ולארגז אין חומרים משלהם.

  • ב־Start(), הגדירו את החומר של הקוליידר הזה עצמו ל־bounce ול־friction (גם דינמי וגם סטטי).
  • כל מה שנוחת על משטח חייב לקפוץ עם מלוא ערך ה־bounce של המשטח, וכל מה שמחליק עליו חייב לקבל את ה־friction של המשטח עצמו, ולא תערובת עם הערך 0.6 של עצמים ללא חומר.

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

נסו בעצמכם

using UnityEngine;

public class Surface : MonoBehaviour
{
    public float bounce = 0f;
    public float friction = 0.6f;

    void Start()
    {
        // הקצו ל-collider הזה חומר משלו עם bounce ו-friction
    }
}
quiz iconבחנו את עצמכם

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

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