Entwicklerleitfaden für Instant Placements für AR Foundation

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

Voraussetzungen

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

Voraussetzungen

In diesem Handbuch 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üge die Komponente AR Raycast Manager zum 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üge die Komponente AR Raycast Manager zum Spielobjekt XR Origin hinzu.

Wenn Raycast Prefab nicht null ist, instanziiert ARRaycastManager die Präfab und synchronisiert ihre Position automatisch mit der Position von ARRaycast.

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 korrekte 3D-Pose hat, ist der ARRaycast.trackingState Tracking. Andernfalls beginnt es mit Limited und wechselt zu Tracking, sobald ARCore eine genaue 3D-Pose hat. Sobald der Tracking-Status Tracking lautet, wird er nicht mehr auf Limited zurückgesetzt.