המדריך למפתחים למיקומים מיידיים של AR Foundation

איך משתמשים ב-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

  1. מוסיפים את האובייקטים המוגדרים מראש במשחק AR Session Origin ו-AR Session.

  2. מוסיפים את הרכיב AR Raycast Manager לאובייקט המשחק AR Session Origin.

כש-Raycast Prefab לא null, ARRaycastManager יוצר מופע של ה-Prefab וסוגר באופן אוטומטי את הסנכרון בין התנוחה שלו לתנוחה של ARRaycast.

AR Foundation 5.x

  1. מוסיפים את אובייקטי המשחק XR Origin ו-AR Session שהוגדרו מראש.

  2. מוסיפים את הרכיב 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.