מבצעים 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 ממפה את הגיאומטריה המקומית ומוצאת מישור מצטלב, המרחק מתעדכן למרחק בפועל. השינוי במרחק יכול להשפיע על 'הגודל' או על ההיקף של האובייקט.