Menu
CoddyTech

הדיפה לאחור

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

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

[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

אתגר

בינוני

תנו לשחקן ליצור גל הלם באמצעות Space.

  1. בעת Input.GetKeyDown(KeyCode.Space), עברו בלולאה על foreach (Collider hit in Physics.OverlapSphere(transform.position, radius)), תוך דילוג על הקוליידר של השחקן עצמו.
  2. עבור כל hit.TryGetComponent(out Rigidbody body), חשבו את away = hit.transform.position - transform.position עם away.y = 0f.
  3. קראו ל־body.AddForce(away.normalized * power + Vector3.up * lift, ForceMode.Impulse);.

לחצו על "שחק" ולחצו על Space בין הארגזים. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

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
    }
}

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

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