Wykonywanie raycastów w aplikacji Unity (AR Foundation)

Wykonaj raycast, czyli test trafień, by określić prawidłowe położenie obiektu 3D w scenie. Dzięki odpowiednim umiejscowieniu treści AR renderowane są w odpowiednim (widocznym) rozmiarze.

Typy wyników działań

Test działań może zwrócić 4 rodzaje wyników działań, jak pokazano w tabeli poniżej.

Typ wyniku działania Opis Orientacja Przypadek użycia Wywołania metod
Głębokość Określa prawidłową głębokość i orientację punktu, korzystając z informacji o głębi z całej sceny Prostokątna do powierzchni 3D Umieść wirtualny obiekt na dowolnej powierzchni (nie tylko na podłodze i ścianach). Aby to zadziałało, musisz włączyć Depth.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Samolot uderza w powierzchnię poziomą lub pionową, aby określić właściwą głębokość i orientację punktu. Prostokątna do powierzchni 3D Możesz umieścić obiekt na płaszczyźnie (podłodze lub ścianie), korzystając z pełnej geometrii samolotu. Wymaga natychmiastowej prawidłowej skali. Zastępcza wersja testowa trafień typu Depth ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punkt funkcji Zależy od elementów wizualnych związanych z punktem kliknięcia w celu określenia jego prawidłowej pozycji i orientacji Prostokątna 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)
Persistent Raycast (natychmiastowe umieszczanie) Zajmuje miejsce na ekranie do umieszczania treści. Początkowo używana jest szacunkowa głębokość podana przez aplikację. Działa od razu, ale położenie i rzeczywista głębia zmienią się, gdy ARCore zdoła określić prawdziwą geometrię sceny +Y w górę, przeciwnie do grawitacji Umieść obiekt na płaszczyźnie (podłoga lub ściana) przy użyciu pełnej geometrii samolotu w sytuacji, gdy szybkie umieszczenie danych ma kluczowe znaczenie. Działanie aplikacji może tolerować nieznaną początkową głębokość i skalę. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Wykonywanie standardowego przesyłania promieni

Wywołaj ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType), aby przeprowadzić raycast (test trafień). ARRaycastManager obsługuje wszystkie typy 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ź transmisję promieniowania przy użyciu dowolnego promienia i kierunku

Raycasty są zwykle traktowane jako promienie z aparatu urządzenia lub aparatu urządzenia, ale możesz skorzystać z Raycast(Ray, List<ARRaycastHit>, TrackableType), aby przeprowadzić promień przy użyciu dowolnego promienia we współrzędnych kosmicznych zamiast punktu w przestrzeni ekranowej.

Utwórz kotwicę za pomocą atrybutu ARRaycastHit

Gdy otrzymasz trafienie raycast, użyj narzędzia GameObject.AddComponent<ARAnchor> do utworzenia kotwicy i dodaj ją jako komponent do obiektu GameObject, używając jako danych wejściowych tego trafienia. Komponent ARAnchor będzie stale aktualizować Transform obiektu gry, tak aby obiekt gry był połączony z bazowym obiektem Trackable, by uzyskać wynik działania.

Trwałe promieniowanie promieni (natychmiastowe umieszczanie)

Trwałe transmisje promieni wykorzystują lokalizację ekranu i szacowaną odległość od powierzchni jako dane wejściowe, aby utworzyć nowy element typu ARRaycast, który umożliwia umieszczanie treści AR w scenie. W ARCore jest to tzw. Szybkie miejsce docelowe.

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

Początkowo odległość od linii ARRaycast będzie odległością podaną w wywołaniu AddRaycast(). Gdy narzędzie ARCore zmapuje lokalną geometrię i znajdzie przecinającą się płaszczyznę, odległość jest aktualizowana do rzeczywistej odległości. Zmiana odległości może mieć wpływ na pozorny „rozmiar” czy też postrzeganej skali obiektu.

Co dalej?