איך משתמשים ב-Instant Placement API או בקרני ריי קבועות באפליקציות שלכם.
דרישות מוקדמות
לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן ARCore.
שמות של מושגים
שמות של מושגים ושיטות מסוימים עשויים להיות שונים ב-AR Foundation וב-ARCore SDK for 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 Foundation. פועלים לפי השלבים הבאים כדי להגדיר את הסצנה.
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 תקבל תנוחה 3D מדויקת. אחרי שסטטוס המעקב ישתנה ל-Tracking
, הוא לא יחזור ל-Limited
.