הדיפה לאחור
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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 לפי החצים מאבד אותה כעבור צעד אחד, ולכן סקריפט כזה צריך להשאיר את המהירות ללא שינוי לרגע אחרי פגיעה, או להזיז את השחקן באמצעות כוחות.
אתגר
בינוניתנו לשחקן ליצור גל הלם באמצעות Space.
- בעת
Input.GetKeyDown(KeyCode.Space), עברו בלולאה עלforeach (Collider hit in Physics.OverlapSphere(transform.position, radius)), תוך דילוג על הקוליידר של השחקן עצמו. - עבור כל
hit.TryGetComponent(out Rigidbody body), חשבו אתaway = hit.transform.position - transform.positionעםaway.y = 0f. - קראו ל־
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
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין