Menu
CoddyTech

שמרו על המהירות

שיעור 3 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.

כדור של Brick Breaker אף פעם לא מאט. ה-PhysicsMaterial עושה את רוב העבודה: ערך קפיציות של 1 שומר על כל המהירות אחרי קפיצה, וחיכוך של 0 מונע מהקירות לגרור אותו. לקירות אין חומר, ו-Unity מחשב כברירת מחדל את הממוצע של ערכי שני המתנגשים: הערך 1 של הכדור והערך 0 של הקיר גורמים לקפיצה בחצי מהמהירות. bounceCombine = Maximum ו-frictionCombine = Minimum גורמים לערכים של הכדור עצמו לקבוע.

הפיזיקה עדיין לא מדויקת לחלוטין: מחבט בתנועה מוסיף את המהירות שלו, ושגיאות קטנות מצטברות לאורך מאות קפיצות. לכן בכל צעד פיזיקה הכדור שומר על הכיוון שלו ומקבל בחזרה את המהירות שלו:

rb.linearVelocity = rb.linearVelocity.normalized * 7f;

כדור שהאט למהירות של 2 יחידות בשנייה שוב נע במהירות של 7 בצעד הבא.

challenge icon

אתגר

קל

גרום לכדור לקפוץ לנצח במהירות קבועה.

  1. ב־Awake() של Ball, צור new PhysicsMaterial("Bouncy") עם מקדם החזרה של 1, ושני מקדמי החיכוך 0, עם bounceCombine = PhysicsMaterialCombine.Maximum ו־frictionCombine = PhysicsMaterialCombine.Minimum; הגדר אותו ב־GetComponent<Collider>().material.
  2. הוסף את FixedUpdate(): אם הכדור שוגר, בצע rb.linearVelocity = rb.linearVelocity.normalized * speed;

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

נסו בעצמכם

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}

כל השיעורים ביחידה Unity: משחק שובר לבנים

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