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.