איך משתמשים ב-Instant Placement API או בקרני ריי קבועות באפליקציות שלכם.
דרישות מוקדמות
לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן ARCore.
שמות של מושגים
השמות של מושגים ו-methods מסוימים עשויים להיות שונים בין AR Foundation לבין ARCore SDK ל-Unity. האפשרויות האלה מפורטות בטבלה הבאה.
AR Foundation | ARCore SDK ל-Unity |
העברת קרני אור מתמשכת | מיקום מודעה מיידית |
ARRaycastManager.AddRaycast(Vector2, float)
|
Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
|
ARRaycast
|
TrackableHit
|
(אין שקילות) | InstantPlacementPoint
|
ARRaycast.trackingState
|
InstantPlacementPointTrackingMethod
|
דרישות מוקדמות
במדריך הזה אנחנו יוצאים מנקודת הנחה שכבר התקנתם והגדרתם את Unity. אם לא, תוכלו לעיין במאמר תחילת השימוש ב-ARCore Extensions for AR Foundation כדי לקבל הוראות להתקנה ולהגדרה.
הגדרת סשן חדש באמצעות ARRaycastManager
התכונה 'מיקום מיידי' (שידורי קרניים מתמידים) זמינה מחוץ לאריזה ברכישת חבילת מסד ה-AR. פועלים לפי השלבים הבאים כדי להגדיר את הסצנה.
AR Foundation 4.x
מוסיפים את האובייקטים המוגדרים מראש במשחק AR Session Origin ו-AR Session.
מוסיפים את הרכיב AR Raycast Manager לאובייקט המשחק AR Session Origin.
כש-Raycast Prefab לא null, ARRaycastManager
יוצר מופע של ה-Prefab וסוגר באופן אוטומטי את הסנכרון בין התנוחה שלו לתנוחה של ARRaycast
.
AR Foundation 5.x
מוסיפים את אובייקטי המשחק XR Origin ו-AR Session שהוגדרו מראש.
מוסיפים את הרכיב AR Raycast Manager לאובייקט המשחק XR Origin.
כש-Raycast Prefab לא null, ARRaycastManager
יוצר מופע של ה-Prefab וסוגר באופן אוטומטי את הסנכרון בין התנוחה שלו לתנוחה של ARRaycast
.
הצבת אובייקט
בסשן ARCore חדש, מבצעים בדיקת התנגשות באמצעות ARRaycastManager.AddRaycast(Vector2, float)
.
public ARRaycastManager RaycastManager; // set from the Editor Inspector.
void Update()
{
Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
return;
}
if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
return;
}
ARRaycast raycast = RaycastManager.AddRaycast(touch.position, _estimateDistance);
if (raycast != null)
{
// You can instantiate a 3D object here if you haven’t set Raycast Prefab in the scene.
…
}
}
מעקב אחר סטטוס המעקב של ARRaycast
אם ל-ARCore יש תנוחה מדויקת בתלת-ממד, הערך של ARRaycast.trackingState
יהיה Tracking
.
אחרת, הוא יתחיל ב-Limited
ויעבור ל-Tracking
ברגע שמערכת ARCore תזהה תנוחה מדויקת תלת-ממדית. אחרי שסטטוס המעקב יהיה Tracking
, הוא לא יחזור לסטטוס Limited
.