שמרו על המהירות
שיעור 3 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.
כדור של Brick Breaker אף פעם לא מאט. ה-PhysicsMaterial עושה את רוב העבודה: ערך קפיציות של 1 שומר על כל המהירות אחרי קפיצה, וחיכוך של 0 מונע מהקירות לגרור אותו. לקירות אין חומר, ו-Unity מחשב כברירת מחדל את הממוצע של ערכי שני המתנגשים: הערך 1 של הכדור והערך 0 של הקיר גורמים לקפיצה בחצי מהמהירות. bounceCombine = Maximum ו-frictionCombine = Minimum גורמים לערכים של הכדור עצמו לקבוע.
הפיזיקה עדיין לא מדויקת לחלוטין: מחבט בתנועה מוסיף את המהירות שלו, ושגיאות קטנות מצטברות לאורך מאות קפיצות. לכן בכל צעד פיזיקה הכדור שומר על הכיוון שלו ומקבל בחזרה את המהירות שלו:
rb.linearVelocity = rb.linearVelocity.normalized * 7f;כדור שהאט למהירות של 2 יחידות בשנייה שוב נע במהירות של 7 בצעד הבא.
אתגר
קלגרום לכדור לקפוץ לנצח במהירות קבועה.
- ב־
Awake()שלBall, צורnew PhysicsMaterial("Bouncy")עם מקדם החזרה של 1, ושני מקדמי החיכוך 0, עםbounceCombine = PhysicsMaterialCombine.Maximumו־frictionCombine = PhysicsMaterialCombine.Minimum; הגדר אותו ב־GetComponent<Collider>().material. - הוסף את
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 אונליין