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

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

  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 תקבל תנוחה 3D מדויקת. אחרי שסטטוס המעקב ישתנה ל-Tracking, הוא לא יחזור ל-Limited.