ביצוע הקלטות raycast באפליקציית Unity (AR Foundation)

מבצעים raycast (בדיקת פגיעה) כדי לקבוע את המיקום הנכון של אובייקט תלת-ממדי בסצנה. מיקום נכון מבטיח שתוכן ה-AR יומר בגודל המתאים (החזותי).

סוגי תוצאות של היטים

בדיקת היטים יכולה להניב ארבעה סוגים שונים של תוצאות היטים, כפי שמתואר בטבלה הבאה.

סוג התוצאה של ההיט תיאור כיוון תרחיש לדוגמה קריאות ל-method
עומק שימוש במידע עומק מכל הסצנה כדי לקבוע את העומק והכיוון הנכונים של נקודה בניצב לפני השטח התלת-ממדי להציב אובייקט וירטואלי על משטח שרירותי (לא רק על רצפות וקירות) כדי שזה יפעל, צריך להפעיל את Depth.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
מטוס מכה במשטחים אופקיים ו/או אנכיים כדי לקבוע את העומק והכיוון הנכונים של נקודה בניצב לפני השטח התלת-ממדי מיקום אובייקט במישור (רצפה או קיר) באמצעות הגיאומטריה המלאה של המישור. דרושה לי סולם ציונים מתוקן באופן מיידי. חלופה לבדיקת ההיט (hit-test) של עומק ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
נקודת תכונה מתבססת על תכונות חזותיות סביב הנקודה שבה המשתמש מקייש כדי לקבוע את המיקום והכיוון הנכונים של הנקודה בניצב לפני השטח התלת-ממדי להציב אובייקט על משטח שרירותי (לא רק על רצפות וקירות) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Persistent Raycast (מיקום מודעה מיידי) תוכן שמופיע במסך. בהתחלה נעשה שימוש בעומק המשוער שסופק על ידי האפליקציה. הפעולה פועלת באופן מיידי, אבל התנוחה והעומק בפועל ישתנו ברגע ש-ARCore תוכל לקבוע את הגיאומטריה בפועל של הסצנה. +Y מצביע למעלה, בניגוד לכוח המשיכה מיקום אובייקט במישור (רצפה או קיר) באמצעות הגיאומטריה המלאה של המישור, במקרים שבהם מיקום מהיר הוא קריטי והחוויה יכולה לסבול עומק וגודל ראשוניים לא ידועים ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

ביצוע raycast רגיל

קוראים ל-ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) כדי לבצע בדיקת פגיעה (raycast). ARRaycastManager תומך בכל TrackableType.

var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
    return;

// Raycast against planes and feature points.
const TrackableType trackableTypes =
    TrackableType.FeaturePoint |
    TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
    // Raycast hits are sorted by distance, so the first one will be the closest hit.
    var hit = hits[0];
    // Do something with hit.
}

ביצוע raycast באמצעות קרן וכיוון שרירותיים

בדרך כלל, קריאות Raycast מטופלות כקרניים מהמכשיר או מהמצלמה של המכשיר, אבל אפשר להשתמש ב-Raycast(Ray, List<ARRaycastHit>, TrackableType) כדי לבצע קריאת Raycast באמצעות קרן שרירותית בקואורדינטות של מרחב העולם במקום נקודה במרחב המסך.

יצירת עמוד עוגן באמצעות ARRaycastHit

אחרי שמקבלים היטל של קרן אור, משתמשים ב-GameObject.AddComponent<ARAnchor> כדי ליצור עוגן ולהוסיף אותו כרכיב ל-GameObject, באמצעות ההיטל של קרן האור כקלט. הרכיב ARAnchor יעדכן באופן רציף את Transform של אובייקט המשחק, כדי שאובייקט המשחק יישאר מחובר ל-Trackable הבסיסי של תוצאת ההיט.

קרני סריקה קבועות (מיקום מיידי)

הקרנות לייזר עקביות משתמשות במיקום במסך ובמרחק משוער לפני השטח כקלט כדי ליצור ARRaycast חדש למיקום תוכן AR בסצנה. ב-ARCore, הפעולה הזו נקראת מיקום מיידי.

קוראים ל-ARRaycastManager.AddRaycast() כדי ליצור ARRaycast שימשיך להתעדכן באופן אוטומטי עד שתפעילו את ARRaycastManager.RemoveRaycast() או תשביתו את ARRaycastManager.

בשלב הראשון, המרחק של ARRaycast יהיה המרחק שצוין בקריאה ל-AddRaycast(). אחרי ש-ARCore ממפה את הגיאומטריה המקומית ומוצאת מישור מצטלב, המרחק מתעדכן למרחק בפועל. השינוי במרחק יכול להשפיע על 'הגודל' או על ההיקף של האובייקט.

מה השלב הבא?