RaycastHit
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 36 מתוך 71.
Physics.Raycast יכולה גם לומר לך במה היא פגעה. הוסף out RaycastHit hit אחרי הכיוון: כשהמתודה מחזירה true, היא מילאה את hit בפרטים. כך מתודת C# מחזירה ערך נוסף באמצעות משתנה שאתה נותן לה: out. מד הטווח הזה מתעד במה הוא מצביע וכמה רחוק זה נמצא, כשלוחצים על Space:
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
{
Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
}
}
}כשמצביעים על קיר שחלקו הקדמי נמצא במרחק של 12 יחידות, הוא מתעד Wall is 12 units away. שדות נוספים: hit.point הוא המקום בעולם שבו הקרן נגעה במשטח, hit.normal הוא הכיוון שאליו המשטח פונה באותו מקום ((0, 1, 0) על קרקע שטוחה), ו-hit.transform הוא ה-Transform של האובייקט שבו פגעת. דרך hit.collider.gameObject אפשר לגשת לכל מידע נוסף עליו, כמו התג שלו.
קרא את hit רק בתוך if. כשהקרן מחטיאה, Raycast מחזירה false ול-hit אין ערך שימושי: ה-collider שלו הוא null.
אתגר
בינוניהוסף לאקדח כוונת לייזר: נקודה אדומה במקום שבו הלייזר פוגע.
- בתוך
Update(), בצעPhysics.Raycast(transform.position, transform.forward, out RaycastHit hit, range). - כשהוא פוגע, קרא ל־
dot.gameObject.SetActive(true);והגדרdot.position = hit.point;. - כשהוא מפספס, קרא ל־
dot.gameObject.SetActive(false);.
לחץ על „שחק” וסובב את האקדח: הנקודה מחליקה על הקיר ועל הארגזים. לאחר מכן לחץ על „בדיקה”.
נסו בעצמכם
using UnityEngine;
public class LaserSight : MonoBehaviour
{
public Transform dot;
public float range = 15f;
void Update()
{
// מקם את הנקודה במקום שבו הלייזר פוגע במשטח; הסתר אותה כשהלייזר לא פוגע בדבר.
}
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין