Entwicklerleitfaden für Instant Placements für AR Foundation

Informationen zur Verwendung der Instant Placement API oder persistenter Raycasts in Ihren eigenen Apps

Vorbereitung

Machen Sie sich mit den grundlegenden AR-Konzepten und der Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Konzeptnamen

Die Namen bestimmter Konzepte und Methoden können sich zwischen AR Foundation und dem ARCore SDK for Unity unterscheiden. Sie sind in der folgenden Tabelle aufgeführt.

AR Foundation ARCore SDK for Unity
Persistente Raycasts Instant Placement
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Keine Äquivalenz) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Vorbereitung

In diesem Leitfaden wird davon ausgegangen, dass Sie Unity bereits installiert und konfiguriert haben. Falls nicht, finden Sie unter Erste Schritte mit ARCore-Erweiterungen für AR Foundation Informationen zu den Installations- und Einrichtungsschritten.

Neue Sitzung mit ARRaycastManager konfigurieren

Die Funktion „Instant Placement“ (persistente Raycasts) ist im AR Foundation-Paket bereits enthalten. So richten Sie die Szene ein:

AR Foundation 4.x

  1. Fügen Sie die vordefinierten Spielobjekte AR Session Origin und AR Session hinzu.

  2. Fügen Sie die Komponente AR Raycast Manager dem Spielobjekt AR Session Origin hinzu.

Wenn „Raycast Prefab“ nicht null ist, wird das Prefab von ARRaycastManager instanziiert und seine Pose automatisch mit der Pose von ARRaycast synchronisiert.

AR Foundation 5.x

  1. Fügen Sie die vordefinierten Spielobjekte XR Origin und AR Session hinzu.

  2. Fügen Sie die Komponente AR Raycast Manager dem Spielobjekt XR Origin hinzu.

Wenn „Raycast Prefab“ nicht null ist, wird das Prefab von ARRaycastManager instanziiert und seine Pose automatisch mit der Pose von ARRaycast synchronisiert.

Objekt platzieren

Führen Sie in einer neuen ARCore-Sitzung einen Treffertest mit ARRaycastManager.AddRaycast(Vector2, float) durch.

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.
        …
    }
}

Tracking-Status von ARRaycast überwachen

Wenn ARCore eine genaue 3D-Pose hat, ist ARRaycast.trackingState Tracking. Andernfalls beginnt es mit Limited und wechselt zu Tracking, sobald ARCore eine genaue 3D-Pose hat. Sobald der Tracking-Status Tracking ist, wird er nicht mehr zu Limited zurückgesetzt.