Wykonywanie raycastów w aplikacji Unity (AR Foundation)

Wykonaj raycast lub test trafień, by ustalić prawidłowe położenie obiektu 3D na scenie. Odpowiednie umiejscowienie pozwala zapewnić, że treści AR będą renderowane w odpowiednim (widocznym) rozmiarze.

Typy wyników działań

Test działań może zwrócić wyniki 4 różnych typów działań, które przedstawiliśmy w tabeli poniżej.

Typ wyniku działania Opis Orientacja Przypadek użycia Wywołania metod
Głębokość Wykorzystuje informacje o głębi z całej sceny, aby określić prawidłową głębokość i orientację punktu Prostopadła do powierzchni 3D umieszczać wirtualny obiekt na dowolnej powierzchni (nie tylko na podłodze i ścianach); Aby to było możliwe, musisz włączyć Depth.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Samolot Uderzenie powierzchni poziomej i/lub pionowej w celu określenia prawidłowej głębokości i orientacji punktu Prostopadła do powierzchni 3D Umieść obiekt na płaszczyźnie (podłodze lub na ścianie), wykorzystując pełną geometrię płaszczyzny. Natychmiastowa poprawna waga. Postaw na testy Depth ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punkt cechy Działanie zależy od elementów wizualnych wokół punktu dotknięcia użytkownika w celu określenia jego prawidłowej pozycji i orientacji. Prostopadła do powierzchni 3D Umieść obiekt na dowolnej powierzchni (nie tylko na podłodze i ścianach). ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Trwały Raycast (błyskawiczne miejsce docelowe) Do umieszczania treści wykorzystuje miejsce na ekranie. Początkowo używa szacowanej głębokości podanej przez aplikację. Działa od razu, ale położenie i głębokość ulegną zmianie, gdy ARCore ustali rzeczywistą geometrię sceny +Y skierowany w górę, przeciwny do grawitacji Umieść obiekt na płaszczyźnie (podłodze lub na ścianie), wykorzystując pełną geometrię samolotu, gdzie szybkie rozmieszczenie ma kluczowe znaczenie, a doświadczenie może tolerować nieznaną początkową głębokość i skalę. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Wykonywanie standardowego rzutu raycast

Zadzwoń pod numer ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType), aby przeprowadzić raycast (test trafień). ARRaycastManager obsługuje wszystkie komponenty TrackableType.

var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
    return;

// Raycast against planes and feature points.
const TrackableType trackableTypes =
    TrackableType.FeaturePoint |
    TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
    // Raycast hits are sorted by distance, so the first one will be the closest hit.
    var hit = hits[0];
    // Do something with hit.
}

Przeprowadź rzut przy użyciu dowolnego promienia i kierunku

Promienie są zwykle traktowane jako promienie pochodzące z urządzenia lub aparatu urządzenia, ale można użyć Raycast(Ray, List<ARRaycastHit>, TrackableType) do przeprowadzenia promieniowania dowolnego promienia we współrzędnych przestrzeni świata zamiast punktu w przestrzeni ekranu.

Utwórz reklamę zakotwiczoną, korzystając z metody ARRaycastHit

Po wygenerowaniu trafienia raycast użyj GameObject.AddComponent<ARAnchor>, aby utworzyć kotwice i dodać je jako komponent do GameObject, używając jako danych wejściowych trafienia raycast. Komponent ARAnchor stale aktualizuje Transform obiektu gry, dzięki czemu pozostaje on dołączony do bazowego elementu Trackable na potrzeby wyniku działania.

Trwałe promienie (błyskawiczne)

Trwałe promienie wykorzystują lokalizację ekranu i szacowaną odległość od powierzchni jako dane wejściowe, aby utworzyć nowy obiekt ARRaycast, który umieści treści AR w scenie. W ARCore jest to tzw. błyskawiczne miejsce docelowe.

Zadzwoń pod numer ARRaycastManager.AddRaycast(), aby utworzyć ARRaycast, który będzie aktualizowany automatycznie, dopóki nie zadzwonisz do ARRaycastManager.RemoveRaycast() lub nie wyłączysz ARRaycastManager.

Początkowo odległość użytkownika ARRaycast będzie określona w rozmowie AddRaycast(). Gdy ARCore zmapuje lokalną geometrię i znajdzie przecinającą się płaszczyznę, odległość zostanie zaktualizowana do rzeczywistej. Zmiana odległości może wpłynąć na pozorny „rozmiar” lub postrzeganą skalę obiektu.

Co dalej?