Aby określić prawidłowe umieszczenie obiektu 3D w scenie, wykonaj rzutowanie promieniom lub test kolizji. Prawidłowe umieszczenie zapewnia, że treści AR są renderowane w odpowiednim (widocznym) rozmiarze.
Typy wyników
Testowanie dopasowania może dać 4 rodzaje wyników, 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); |
Aby to działało, musisz włączyć Depth .ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
Samolot | Uderzenia w poziome lub pionowe powierzchnie w celu określenia prawidłowej głębokości i orientacji punktu | prostopadle do powierzchni 3D. | Umieść obiekt na płaszczyźnie (podłodze lub ścianie) za pomocą pełnej geometrii płaszczyzny. Potrzebuję natychmiastowej zmiany skali. Zastępnik testu interakcji Depth |
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 przeszukiwanie promieniowe (Natychmiastowe umieszczanie) | Wykorzystuje przestrzeń 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 rzutowania promieniowego
Aby wykonać rzut promieniowy (test kolizji), wywołaj funkcję ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
. ARRaycastManager
obsługuje wszystkie 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 kamery, ale możesz użyć Raycast(Ray, List<ARRaycastHit>, TrackableType)
, aby 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ązki promieniowej użyj funkcji GameObject.AddComponent<ARAnchor>
, aby utworzyć ankaż i dodać go jako komponent do funkcji GameObject
, używając trafienia wiązki promieniowej jako danych wejściowych. Komponent ARAnchor
będzie stale aktualizować Transform
obiektu gry, aby obiekt gry pozostawał przyłączony do podstawowego Trackable
dla wyniku uderzenia.
Stałe rzuty promieniowe (szybkie 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 błyskawicznym umieszczaniem.
Wywołaj ARRaycastManager.AddRaycast()
, aby utworzyć ARRaycast
, który będzie automatycznie aktualizowany, dopóki nie wywołasz 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 wpływać na pozorny „rozmiar” lub postrzeganą skalę obiektu.