Przewodnik dla programistów dotyczący błyskawicznego miejsca docelowego dla AR Foundation

Dowiedz się, jak używać w swoich aplikacjach interfejsu Instant Placement API lub trwałych raycastów.

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że znasz podstawowe pojęcia związane z AR i wiesz, jak skonfigurować sesję ARCore.

Nazwy koncepcji

Nazwy niektórych koncepcji i metod mogą się różnić w przypadku AR Foundation i pakietu SDK ARCore SDK dla Unity. W poniższej tabeli przedstawiamy je w przystępny sposób.

Fundacja AR Pakiet SDK ARCore na Unity
Trwałe promieniowanie Szybkie miejsce docelowe
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Brak odpowiednika) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Wymagania wstępne

W tym przewodniku zakładamy, że masz już zainstalowaną i skonfigurowaną Unity. Jeśli nie, zapoznaj się z artykułem Pierwsze kroki z rozszerzeniami ARCore Extensions for AR Foundation, aby zapoznać się z krokami instalacji i konfiguracji.

Skonfiguruj nową sesję z usługą ARRaycastManager

Szybkie miejsce docelowe (trwałe raycasty) jest dostępne od razu w pakiecie AR Foundation. Aby skonfigurować scenę, wykonaj te czynności.

AR Foundation 4.x

  1. Dodaj wstępnie zdefiniowane obiekty gry AR Session Origin i AR Session.

  2. Dodaj komponent AR Raycast Manager do obiektu gry AR Session Origin.

Jeśli prefab Raycast nie ma wartości null, ARRaycastManager utworzy instancję prefab i automatycznie zsynchronizuje jej pozycję z położeniem ARRaycast.

AR Foundation 5.x

  1. Dodaj wstępnie zdefiniowane obiekty gry XR Origin i AR Session.

  2. Dodaj komponent AR Raycast Manager do obiektu gry XR Origin.

Jeśli prefab Raycast nie ma wartości null, ARRaycastManager utworzy instancję prefab i automatycznie zsynchronizuje jej pozycję z położeniem ARRaycast.

Umieść obiekt

W nowej sesji ARCore wykonaj test trafień za pomocą 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.
        …
    }
}

Monitorowanie stanu śledzenia ARRaycast

Jeśli ARCore ma dokładną pozycję w 3D, ARRaycast.trackingState ma wartość Tracking. W przeciwnym razie zaczyna się od Limited i przechodzi do Tracking, gdy ARCore ustawi dokładną pozycję w 3D. Gdy stan śledzenia zmieni się na Tracking, nie zostanie przywrócona do Limited.