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