מבצעים raycast, או בדיקת היטים, כדי לקבוע את המיקום הנכון של אובייקט תלת-ממדי בסצנה. מיקום נכון מבטיח שתוכן ה-AR יעובד בגודל המתאים (הנראה).
סוגים של תוצאות היטים
בדיקת היט יכולה להניב ארבעה סוגים שונים של תוצאות היטים, כפי שמוצג בטבלה הבאה.
סוג תוצאת ההיט | תיאור | כיוון | תרחיש לדוגמה | קריאות לשיטות |
---|---|---|---|---|
עומק | נעשה שימוש במידע על העומק מכל הסצנה כדי לקבוע את העומק והכיוון הנכונים של נקודה | מאונך לפני השטח התלת-ממדי | מניחים אובייקט וירטואלי על משטח שרירותי (לא רק על רצפות וקירות) |
כדי שזה יעבוד, צריך להפעיל את 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)
|
קרינה קבועה (מיקום מיידי) | משתמש בשטח המסך למיקום התוכן. בהתחלה נעשה שימוש בעומק המשוער שסופק על ידי האפליקציה. התמונה פועלת באופן מיידי, אבל התנוחה והעומק האמיתי ישתנו ברגע ש-ARCore יוכל לזהות את הגיאומטריה של הסצנה בפועל | +Y שמצביע למעלה, נגד כוח הכבידה | מציבים עצם על מישור (רצפה או קיר) באמצעות הגיאומטריה המלאה של המטוס, כשהמיקום המהיר הוא קריטי, והחוויה יכולה להכיל עומק וקנה מידה לא ידועים. |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
ביצוע קרניים רגילות
קוראים לפונקציה ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
כדי לבצע תדרי רדיו (בדיקת התאמה). יש תמיכה בכל הנכסים של TrackableType
ב-ARRaycastManager
.
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(Ray, List<ARRaycastHit>, TrackableType)
כדי לבצע קרינה באמצעות קרן שרירותית בקואורדינטות של מרחב עולמי במקום נקודה על המסך.
יצירת עוגן באמצעות ARRaycastHit
אחרי שמקבלים היט מסוג קרניים, משתמשים ב-GameObject.AddComponent<ARAnchor>
כדי ליצור עוגן ומוסיפים אותו כרכיב ל-GameObject
, תוך שימוש בהיט של ה-raycast כקלט. הרכיב ARAnchor
יעדכן באופן קבוע את Transform
של אובייקט המשחק, כך שאובייקט המשחק יישאר מצורף ל-Trackable
הבסיסי של תוצאת ההיט.
קרניים מתמשכות (מיקום מיידי)
מצלמות קרניים מתמשכות משתמשות במיקום המסך ובמרחק המשוער לפני השטח כקלט, כדי ליצור ARRaycast
חדש למיקום של תוכן AR בסצנה. ב-ARCore, השיטה הזו נקראת מיקום מיידי.
קוראים למספר ARRaycastManager.AddRaycast()
כדי ליצור ARRaycast
שימשיך להתעדכן אוטומטית עד שתתקשרו אל ARRaycastManager.RemoveRaycast()
או עד שתשביתו את ARRaycastManager
.
בהתחלה, המרחק של ARRaycast
יהיה המרחק שיסופק בשיחה AddRaycast()
. אחרי ש-ARCore מיפה את הגיאומטריה המקומית ומצא מישור מצטלב, המרחק מתעדכן למרחק בפועל. השינוי במרחק יכול להשפיע על ה"גודל" או קנה המידה בפועל של האובייקט.