Wykonywanie raycastów w aplikacji Unity (AR Foundation)

Wykonaj raycast lub test kolizji, aby określić prawidłowe umieszczenie obiektu 3D w scenie. Prawidłowe umieszczenie zapewnia, że treści AR są renderowane w odpowiednim (widocznym) rozmiarze.

Typy wyników

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 metody,
Głębokość Korzysta z informacji o głębi z całej sceny, aby określić prawidłową głębię i orientację punktu. prostopadle do powierzchni 3D. umieszczanie wirtualnego obiektu na dowolnej powierzchni (nie tylko na podłodze i ścianach); Depth musi być włączona, aby to działało.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Samolot Dotyka poziomych lub pionowych powierzchni, aby określić prawidłową głębokość i orientację punktu. prostopadle do powierzchni 3D. Umieść obiekt na płaszczyźnie (podłodze lub ściana) za pomocą pełnej geometrii płaszczyzny. Potrzebuję natychmiastowej zmiany skali. Zastępczy test interakcji z głębokością ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punkt funkcji Korzysta z elementów wizualnych wokół punktu dotyku użytkownika, aby określić jego prawidłową pozycję i orientację. prostopadle do powierzchni 3D. umieszczanie obiektu na dowolnej powierzchni (nie tylko na podłodze i ścianach); ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Stały Raycast (Natychmiastowe umieszczenie) Używa przestrzeni ekranu do umieszczania treści. Początkowo używa szacowanej głębi dostarczonej przez aplikację. Działa natychmiast, ale pozowanie i rzeczywista głębia zmieniają się, gdy ARCore może określić rzeczywistą geometrię sceny. +Y skierowany w górę, w przeciwnym kierunku niż grawitacja Umieszczenie obiektu na płaszczyźnie (podłodze lub ściana) przy użyciu pełnej geometrii płaszczyzny, gdy szybkie umieszczenie jest kluczowe, a interfejs może tolerować nieznaną początkową głębię 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.
}

Wykonywanie zapytania o przecięcie promienia z dowolnym promieniem i dowolnym kierunkiem

Promienie są zwykle traktowane jako promienie z urządzenia lub jego kamery, ale za pomocą Raycast(Ray, List<ARRaycastHit>, TrackableType) możesz przeprowadzić promieniowanie z dowolnego promienia w układzie współrzędnych świata zamiast punktu w układzie współrzędnych ekranu.

Tworzenie kotwicy za pomocą ARRaycastHit

Po uzyskaniu trafienia wiązką promieniową użyj funkcji GameObject.AddComponent<ARAnchor>, aby utworzyć ankaż i dodać go jako komponent do funkcji GameObject, używając trafienia wiązką promieniową jako danych wejściowych. Komponent ARAnchor będzie stale aktualizować Transform obiektu gry, aby obiekt gry pozostał przyłączony do podstawowego Trackable dla wyniku kolizji.

Trwałe promieniowanie promieni (natychmiastowe umieszczanie)

Stały rzut promieniowy wykorzystuje lokalizację na ekranie i szacowany dystans do powierzchni jako dane wejściowe do utworzenia nowego ARRaycast, aby umieścić treści AR w scenie. W ARCore nazywa się to umieszczaniem natychmiastowym.

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ść ARRaycast będzie taka sama jak w pliku AddRaycast(). Gdy ARCore zmapuje lokalną geometrię i znalezie krzyżujące się płaszczyzny, odległość zostanie zaktualizowana do rzeczywistej odległości. Zmiana odległości może mieć wpływ na pozorny „rozmiar” lub postrzeganą skalę obiektu.

Co dalej?