Menu
CoddyTech

Physics.Raycast

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 35 מתוך 71.

הטלת קרן שולחת קו בלתי נראה מנקודה בכיוון מסוים ומדווחת אם הוא פגע בקוליידר. Physics.Raycast(origin, direction, maxDistance) מחזירה true כשקוליידר נמצא על הקו במרחק של עד maxDistance יחידות, ו-false אחרת. המכונית הזאת בולמת כשיש משהו במרחק של פחות מ-2 יחידות לפני החזית שלה:

public float brakeDistance = 2f;

void Update()
{
    if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
    {
        Debug.Log("Brake!");
    }
}

transform.forward מסתובב יחד עם המכונית, כך שהקרן תמיד פונה קדימה מהחזית שלה; Vector3.forward תמיד היה מצביע לאורך ציר ה-z של העולם. הקרן מתחילה במרכז המכונית, בתוך הקוליידר שלה עצמה, וקרן אף פעם לא מדווחת על קוליידר שהיא מתחילה בתוכו, ולכן המכונית לא מזהה את עצמה. אם לא מציינים את maxDistance, הקרן ממשיכה לנצח: המכונית הייתה בולמת בגלל קיר שנמצא בצד השני של המפה.

קרניים מזהות קוליידרים, ולא את מה שמצויר: אובייקט עם Renderer וללא קוליידר אינו נראה להן, וקוליידר מסוג trigger נחשב לפגיעה. בזמן הבדיקה, Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) מציירת את הקרן בתצוגת Scene של Unity.

challenge icon

אתגר

בינוני

פתח את דלת החנות כשמישהו עומד מתחת לחיישן.

  1. בתוך Update(), בדוק את Physics.Raycast(transform.position, Vector3.down, reach): קרן ישרה כלפי מטה, באורך reach יחידות, שעוצרת מעל הקרקע.
  2. אם התנאי מתקיים, קרא ל־door.SetActive(false);, ובענף else, ל־door.SetActive(true);.

לחץ על "שחק" והולך את המבקר מתחת לחיישן: הדלת נפתחת ונסגרת מאחוריו. אחר כך לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class DoorSensor : MonoBehaviour
{
    public GameObject door;
    public float reach = 3f;

    void Update()
    {
        // פתח את הדלת כל עוד הקרן היורדת מה-Sensor פוגעת במשהו.
    }
}

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

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