Menu
CoddyTech

ניתור וחיכוך

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

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

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

במגע משתתפים שני קוליידרים, ולכן Unity משלבת את שני הערכים שלהם. כל חומר קובע איך לעשות זאת, באמצעות bounceCombine עבור קפיציות ו-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

אתגר

קל

תנו לטרמפולינה ולקרח ערכים משלהם לקפיציות ולחיכוך.

  1. בתוך Start(), קחו את PhysicsMaterial mat = GetComponent<Collider>().material; והגדירו את mat.bounciness = bounce;, את mat.dynamicFriction ואת mat.staticFriction לערך friction.
  2. הגדירו את mat.bounceCombine = PhysicsMaterialCombine.Maximum; ואת mat.frictionCombine = PhysicsMaterialCombine.Minimum;, כדי שהערכים של המשטח עצמו יקבעו.

לחצו על "שחק": הכדור קופץ גבוה מהטרמפולינה. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;

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

    void Start()
    {
        // תנו ל-collider הזה material משלו עם bounce ו-friction
    }
}

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

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