דחיפה באמצעות AddForce
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 2 מתוך 63.
ברגע שלאובייקט יש Rigidbody, הפיזיקה מזיזה אותו, ולכן מפסיקים לשנות את המיקום שלו ודוחפים אותו במקום זאת. rb.AddForce(force) דוחפת את הגוף באמצעות כוח, שהוא Vector3 בניוטונים. כוח לא קובע מהירות: הוא מאיץ את הגוף כל עוד ממשיכים להפעיל אותו, בקצב של הכוח חלקי המסה בכל שנייה. מפסיקים לדחוף, והגוף ממשיך לנוע במהירות שבה הוא נמצא.
לרחפת הזו (2 ק״ג) יש מנוע דחף: כל עוד מקש החץ למעלה לחוץ, כוח בעוצמה thrust דוחף אותה קדימה, לאורך +z. עם דחף בעוצמה 12, המהירות שלה גדלה ב-12 / 2 = 6 מ׳/ש׳ בכל שנייה:
public float thrust = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.UpArrow))
{
rb.AddForce(Vector3.forward * thrust);
}
}כוחות מפעילים בתוך FixedUpdate(), שאותה Unity קוראת לפני כל צעד פיזיקה, 50 פעמים בשנייה (שיעור 4 מסביר למה). אין בשורה הזו Time.deltaTime: AddForce כבר פורס את הכוח על פני הצעד, והכפלה ב-Time.deltaTime תהפוך את הדחיפה לחלשה פי 50. על הקרקע, החיכוך דוחף בכיוון ההפוך, ולכן כוח קטן עלול לא להזיז ארגז כבד כלל.
אתגר
קללדסקית שעל משטח ההחלקה יש Rigidbody, ולקרח אין חיכוך. דחוף אותה באמצעות החצים: הציר Horizontal דוחף אותה לאורך x והציר Vertical לאורך z, בכוח של push (4 ב־Inspector).
דחוף אותה באמצעות כוחות בלבד, כדי שהיא תמשיך להחליק כשתעזוב אותה. לחץ על הפעלה, נווט עם הדסקית ברחבי המשטח, ואז לחץ על בדיקה.
נסו בעצמכם
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// דחוף את הדסקית: Horizontal לאורך ציר x, Vertical לאורך ציר z
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף