Menu
CoddyTech

הדיפה לאחור

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

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

[SerializeField] private float power = 8f;

void OnCollisionEnter(Collision collision)
{
    Vector3 away = collision.transform.position - transform.position;
    away.y = 0f;
    collision.rigidbody.AddForce(away.normalized * power, ForceMode.Impulse);
}

collision.transform.position - transform.position מצביע מהפגוש אל הדבר שפגע בו. ערך ה-y שלו מוגדר ל-0 כדי שהבעיטה תישאר אופקית, ו-normalized הופך אותו לווקטור באותו גודל, בלי קשר למרחק בין שני המרכזים. ForceMode.Impulse היא בעיטה חד-פעמית: היא משנה את המהירות ב-power חלקי המסה, בבת אחת, כך שכדור שמסתו 2 יעוף במהירות חצי מזו של כדור שמסתו 1. ברירת המחדל, ForceMode.Force, מיועדת להפעלה בכל צעד ונותנת השפעה של צעד אחד, קטנה פי 50.

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

challenge icon

אתגר

בינוני

השחקן יכול להפעיל גל הלם. כתבו את הסקריפט Shockwave עבור השחקן. המפקח מגדיר לו radius (4), power (6) ו-lift (2). הסקריפט Player מוכן: החצים מזיזים את השחקן.

  • כשלוחצים על Space, מצאו כל Collider שנמצא בתוך radius מהשחקן באמצעות Physics.OverlapSphere.
  • כל אחד מהם שיש לו Rigidbody, למעט השחקן עצמו, מקבל דחף: power הרחק מהשחקן לאורך הקרקע, בתוספת lift כלפי מעלה.
  • מתעלמים מ-Collider-ים ללא Rigidbody, כמו הקרקע.

לחצו על Play, לכו בין הארגזים ולחצו על Space, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class Shockwave : MonoBehaviour
{
    [SerializeField] private float radius = 4f;
    [SerializeField] private float power = 6f;
    [SerializeField] private float lift = 2f;

    void Update()
    {
        // בלחיצה על Space: להרחיק מהשחקן כל Rigidbody שנמצא בטווח radius
    }
}
quiz iconבחנו את עצמכם

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

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