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
Fügen Sie die vordefinierten Spielobjekte AR Session Origin und AR Session hinzu.
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
Fügen Sie die vordefinierten Spielobjekte XR Origin und AR Session hinzu.
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.