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

תוכלו ללמוד איך להשתמש ב-Instant Placement API או בraycasts קבועים באפליקציות שלכם.

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שאתם מבינים את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן של ARCore.

שמות מושגים

השמות של מושגים ושיטות מסוימים עשויים להיות שונים בין השם של AR Foundation לבין ARCore SDK ל-Unity. הפרטים מפורטים בטבלה הבאה כדי שתוכלו לעיין בהם בקלות.

קרן AR ARCore SDK ל-Unity
קרני לייזר קבועות מיקום מיידי
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(ללא שווי ערך) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

דרישות מוקדמות

המדריך הזה מניח שכבר התקנתם את Unity והגדרתם אותן. אם לא, עיינו במאמר תחילת העבודה עם תוספי ARCore for AR Foundation כדי להבין את שלבי ההתקנה וההגדרה.

הגדרת סשן חדש עם ARRaycastManager

ניתן להשתמש ב'מיקום מיידי' (Raycasts) באופן מיידי עם חבילת ה-AR מהיסוד. אלה השלבים להגדרת הסצנה.

קרן AR 4.x

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

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

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

קרן AR 5.x

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

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

כשהערך של Raycast Prefab הוא לא אפס, הפונקציה ARRaycastManager תיצור את ההעדפות מראש ותסנכרן באופן אוטומטי את התנוחה של 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.