דחיפה באמצעות AddForce
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 2 מתוך 71.
ברגע שלאובייקט יש Rigidbody, הפיזיקה מזיזה אותו, ולכן מפסיקים לשנות את המיקום שלו ודוחפים אותו במקום זאת. rb.AddForce(force) דוחפת את הגוף בכוח, שהוא Vector3 ביחידות ניוטון. כוח לא קובע מהירות: הוא מאיץ את הגוף כל עוד ממשיכים להפעיל אותו, בקצב של הכוח חלקי המסה בכל שנייה. מפסיקים לדחוף, והגוף ממשיך לנוע במהירות שבה הוא נמצא.
לרחפת הזו (2 kg) יש מנוע דחף: כל עוד מקש החץ למעלה לחוץ, כוח של thrust דוחף אותה קדימה, לאורך +z. עם דחף של 12, המהירות שלה גדלה ב-12 / 2 = 6 m/s בכל שנייה:
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. על הקרקע, החיכוך דוחף בכיוון ההפוך, ולכן ייתכן שכוח קטן כלל לא יזיז ארגז כבד.
אתגר
קלדחפו את הדסקית ברחבי המשטח נטול החיכוך באמצעות כוחות.
- ב־
FixedUpdate(), קראו אתfloat h = Input.GetAxis("Horizontal");ואתfloat v = Input.GetAxis("Vertical");. - קראו ל־
rb.AddForce(new Vector3(h, 0, v) * push);, ללאTime.deltaTime.
לחצו על "שחק", דחפו ושחררו: הדסקית ממשיכה להחליק. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין