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
Dodaj wstępnie zdefiniowane obiekty gry AR Session Origin i AR Session.
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
Dodaj wstępnie zdefiniowane obiekty gry XR Origin i AR Session.
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
.