Führen Sie einen Raycast oder Treffertest durch, um die korrekte Position eines 3D-Objekts in Ihrer Szene zu ermitteln. Durch die richtige Platzierung wird sichergestellt, dass der AR-Inhalt in der richtigen (sichtbaren) Größe gerendert wird.
Trefferergebnistypen
Ein Treffertest kann vier verschiedene Arten von Trefferergebnissen liefern, wie in der folgenden Tabelle dargestellt.
Trefferergebnistyp | Beschreibung | Ausrichtung | Anwendungsfall | Methodenaufrufe |
---|---|---|---|---|
Tiefe | Verwendet Tiefeninformationen aus der gesamten Szene, um die korrekte Tiefe und Ausrichtung eines Punkts zu bestimmen. | Senkrecht zur 3D-Oberfläche | Virtuelles Objekt auf einer beliebigen Oberfläche platzieren (nicht nur auf Böden und Wänden) |
Das funktioniert nur, wenn Depth aktiviert ist.ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
Flugzeug | Treffer horizontale und/oder vertikale Oberflächen, um die korrekte Tiefe und Ausrichtung eines Punkts zu bestimmen | Senkrecht zur 3D-Oberfläche | Platzieren Sie ein Objekt auf einer Ebene (Boden oder Wand) unter Verwendung der vollständigen Geometrie der Ebene. Ich brauche sofort die richtige Waage. Fallback für den Tiefen-Treffertest |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
Featurepunkt | Basiert auf visuellen Funktionen rund um den Punkt, an dem Nutzende tippen, um die korrekte Position und Ausrichtung eines Punkts zu bestimmen. | Senkrecht zur 3D-Oberfläche | Platzieren Sie ein Objekt auf einer beliebigen Oberfläche (nicht nur auf Böden und Wänden). |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Persistent Raycast (Instant-Platzierung) | Nutzt Bildschirmfläche, um Inhalte zu platzieren. Verwendet anfangs die von der App bereitgestellte geschätzte Tiefe. Funktioniert sofort, aber Pose und Tiefe ändern sich, sobald ARCore die geometrische Form der Szene bestimmen kann | +Y nach oben, gegenüber der Schwerkraft | Platzieren Sie ein Objekt auf einer Ebene (Boden oder Wand) unter Verwendung der vollständigen Geometrie der Ebene. Hier ist eine schnelle Positionierung von entscheidender Bedeutung und die Erfahrung kann eine unbekannte anfängliche Tiefe und Skalierung tolerieren. |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
Standard-Raycast ausführen
Rufen Sie ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
auf, um einen Raycast (Treffertest) durchzuführen. ARRaycastManager
unterstützt alle TrackableType
s.
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.
}
Einen Raycast mit einem beliebigen Strahlen und einer beliebigen Richtung durchführen
Raycasts werden normalerweise wie Strahlen des Geräts oder der Gerätekamera behandelt. Sie können jedoch mit Raycast(Ray, List<ARRaycastHit>, TrackableType)
einen Raycast mit einem beliebigen Strahlen in Weltraumkoordinaten anstelle eines Bildschirmraumpunkts durchführen.
Mit ARRaycastHit
einen Anker erstellen
Sobald Sie einen Raycast-Treffer haben, erstellen Sie mit GameObject.AddComponent<ARAnchor>
einen Anchor und fügen ihn als Komponente zu GameObject
hinzu. Verwenden Sie dabei den Raycast-Treffer als Eingabe. Die ARAnchor
-Komponente aktualisiert den Transform
des Spielobjekts kontinuierlich, sodass das Spielobjekt an die zugrunde liegende Trackable
für das Trefferergebnis angehängt bleibt.
Persistente Raycasts (sofortige Platzierung)
Dauerhafte Raycasts verwenden die Bildschirmposition und die geschätzte Entfernung zu einer Oberfläche als Eingabe, um eine neue ARRaycast
zu erstellen, mit der Sie AR-Inhalte in Ihrer Szene platzieren. In ARCore wird dies als Instant Placement bezeichnet.
Rufen Sie ARRaycastManager.AddRaycast()
auf, um eine ARRaycast
zu erstellen, die so lange automatisch aktualisiert wird, bis Sie ARRaycastManager.RemoveRaycast()
aufrufen oder ARRaycastManager
deaktivieren.
Anfangs entspricht die Entfernung von ARRaycast
der im AddRaycast()
-Aufruf angegebenen Entfernung. Sobald ARCore die lokale Geometrie kartografiert und eine sich überschneidende Ebene gefunden hat, wird die Entfernung in eine tatsächliche Entfernung aktualisiert. Die Abstandsänderung kann sich auf die sichtbare „Größe“ auswirken. wahrgenommene Größe des Objekts.