בדיקת קרקע באמצעות קרן
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 37 מתוך 71.
קפיצה צריכה להתחיל רק מהקרקע. השיטה Standing on the Ground חישבה זאת על סמך נורמלים של מגע, שהתעדכנו באמצעות הודעות התנגשות. קרן עונה במקום, בכל רגע, על השאלה "האם אני עומד על משהו?": מקרינים אותה ישר למטה מהמרכז, לאורך מעט גדול יותר מהמרחק מהמרכז לתחתית. השחקן הזה הוא כמוסה שגובהה 2 יחידות, ולכן תחתיתה נמצאת יחידה אחת מתחת למרכז שלה, ואורך הקרן הוא 1.1:
public float jumpForce = 5f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
bool IsGrounded()
{
return Physics.Raycast(transform.position, Vector3.down, 1.1f);
}התוספת של 0.1 היא מרווח ביטחון. גוף שנח על הרצפה עשוי להיות מעט מעליה או לשקוע מעט לתוכה, ולכן קרן שאורכה בדיוק 1 מחטיאה בחלק מהפריימים. אורך גדול בהרבה שגוי מהכיוון ההפוך: עם אורך של 3, השחקן יכול לקפוץ שוב כשהוא כבר בגובה 2 יחידות באוויר, ובלי אורך כלל הקרן תמיד מוצאת את הרצפה, כך שכל לחיצה גורמת לקפיצה.
הקרן מתחילה בתוך הקוליידר של השחקן עצמו, שעליו קרניים מדלגות, ולכן היא לעולם לא מדווחת על השחקן. קוראים את המקש ב־Update(), כי GetKeyDown מחזיר true למשך פריים אחד בלבד, ואפשר להוסיף שם מיד דחף חד־פעמי, כמו בקפיצה עם Impulse.
אתגר
בינוניגרמו לצפרדע לקפוץ רק מהקרקע.
- הוסיפו
bool IsGrounded()שמחזירהPhysics.Raycast(transform.position, Vector3.down, 0.85f): רדיוס הצפרדע, 0.75, ועוד 0.1. - ב־
Update(), הוסיפו&& IsGrounded()ל־ifשל מקש הרווח.
לחצו על "שחק" ולחצו פעמיים על מקש הרווח: הצפרדע קופצת פעם אחת. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class Hopper : MonoBehaviour
{
public float jumpForce = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין