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

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

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

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

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

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
מטוס מכה במשטחים אופקיים ו/או אנכיים כדי לקבוע את העומק והכיוון הנכונים של נקודה בניצב למשטח התלת-ממדי מיקום אובייקט במישור (רצפה או קיר) באמצעות הגיאומטריה המלאה של המישור. דרושה סולם נכון באופן מיידי. חלופה לבדיקה של התאמת עומק 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 ממפה את הגיאומטריה המקומית ומוצאת מישור מצטלב, המרחק מתעדכן למרחק בפועל. שינוי המרחק יכול להשפיע על 'הגודל' או על ההיקף של האובייקט.

מה השלב הבא?