Menu
CoddyTech

בדיקת קרקע באמצעות קרן

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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.

challenge icon

אתגר

בינוני

גרמו לצפרדע לקפוץ רק מהקרקע.

  1. הוסיפו bool IsGrounded() שמחזירה Physics.Raycast(transform.position, Vector3.down, 0.85f): רדיוס הצפרדע, 0.75, ועוד 0.1.
  2. ב־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);
        }
    }
}

כל השיעורים ביחידה פיזיקה ומשחקיות

תרגלו בעצמכם: Unity אונליין