בדיקת קרקע באמצעות קרן
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 35 מתוך 63.
קפיצה צריכה להתחיל רק מהקרקע. השיעור 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 לפריים אחד בלבד, ואפשר להוסיף שם דחף חד־פעמי, כמו בשיעור Jump with an Impulse.
אתגר
בינוניהצפרדע קופצת בכל פעם שלוחצים על מקש הרווח, אפילו באוויר, ולכן היא יכולה לטפס לשמיים. תקן את Hopper כך שתקפוץ רק מהקרקע:
- הוסף מתודה
bool IsGrounded()שיורה קרן ישר כלפי מטה ממרכז הצפרדע. הצפרדע היא כדור שקנה המידה שלו 1.5, ולכן הרדיוס שלה הוא 0.75: הארך את הקרן עד 0.1 מעבר לתחתית שלה. - קפוץ רק כאשר לוחצים על מקש הרווח ו-
IsGrounded()מחזירה true.
לחץ על הפעל ונסה לקפוץ פעמיים, ואז לחץ על בדיקה.
נסו בעצמכם
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פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף6Raycasts
Physics.RaycastRaycastHitבדיקת קרקע באמצעות קרןשכבות ו-LayerMaskקו ראייהOverlapSphere ו-SphereCastסיכום: חיישן קרן לייזר