Dowiedz się, jak korzystać z Natychmiastowa lokalizacja API lub trwałe promienie raycast we własnych aplikacjach.
Wymagania wstępne
Upewnij się, że znasz podstawowe pojęcia związane z AR. i dowiedz się, jak skonfigurować sesję ARCore, zanim przejdziesz dalej.
Nazwy koncepcji
Nazwy niektórych koncepcji i metod mogą się różnić między AR Foundation a Pakiet ARCore SDK dla Unity. Przedstawiamy je w tabeli poniżej.
Podstawy AR | Pakiet ARCore SDK dla Unity |
Trwałe promieniowanie promieniowania | 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 przyjęto założenie, że masz już zainstalowaną i skonfigurowaną platformę Unity. Jeśli nie, zapoznaj się z artykułem Wprowadzenie do ARCore Extensions for AR Foundation .
Skonfiguruj nową sesję w aplikacji ARRaycastManager
Błyskawiczne miejsce docelowe (trwałe transmisje promieni) jest dostępne od razu po włączeniu funkcji AR Pakiet podstawowy. Aby skonfigurować scenę, wykonaj te czynności.
AR Foundation 4.x
Dodaj wstępnie zdefiniowane obiekty gry AR Session Origin oraz AR Session
Dodaj komponent AR Raycast Manager do AR Session Origin obiekt gry.
Gdy Prefab Raycast nie ma wartości null, ARRaycastManager
utworzy instancję prefaba i automatycznie zsynchronizuje jej pozycję z położeniem
ARRaycast
AR Foundation 5.x
Dodaj wstępnie zdefiniowane obiekty gry XR Origin oraz AR Session
Dodaj komponent AR Raycast Manager do XR Origin obiekt gry.
Gdy Prefab Raycast nie ma wartości null, ARRaycastManager
utworzy instancję prefaba i automatycznie zsynchronizuje jej pozycję z położeniem
ARRaycast
Umieszczanie obiektu
W nowej sesji ARCore przeprowadź test działań za pomocą funkcji
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ę 3D, ARRaycast.trackingState
będzie mieć wartość Tracking
.
W przeciwnym razie zaczyna się od Limited
i przejście do Tracking
, gdy ARCore uzyska dokładną pozycję 3D. Gdy stan śledzenia zmieni się na Tracking
,
nie zostanie przywrócona
Limited