Raycasts in deiner Unity App (AR Foundation) ausführen

Führen Sie einen Raycast oder einen Treffertest durch, um die korrekte Position eines 3D-Objekts in Ihrer Szene zu bestimmen. Durch die richtige Platzierung wird sichergestellt, dass die AR-Inhalte in der richtigen (offenen) Größe gerendert werden.

Trefferergebnistypen

Ein Treffertest kann zu vier verschiedenen Arten von Trefferergebnissen führen, wie in der folgenden Tabelle dargestellt.

Trefferergebnistyp Beschreibung Ausrichtung Anwendungsfall Methodenaufrufe
Tiefe Es werden Tiefeninformationen aus der gesamten Szene verwendet, um die korrekte Tiefe und Ausrichtung eines Punkts zu bestimmen. Senkrecht zur 3D-Oberfläche Platziere ein virtuelles Objekt auf einer beliebigen Oberfläche (nicht nur auf Böden und Wänden). Depth muss aktiviert sein, damit dies funktioniert.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Flugzeug trifft auf 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 mithilfe der kompletten Geometrie des Flugzeugs auf einer Ebene (Boden oder Wand). Die richtige Skala muss sofort korrigiert werden. Fallback für den Depth-Treffertest ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Elementpunkt Es basiert auf visuellen Elementen um den Punkt herum, an dem der Nutzer tippt, 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 (Sofortplatzierung) Nutzt Platz auf dem Bildschirm, um Inhalte zu platzieren. Zu Beginn wird die von der App zur Verfügung gestellte geschätzte Tiefe verwendet. Funktioniert sofort, aber Pose und tatsächliche Tiefe ändern sich, sobald ARCore die Geometrie der Szene ermittelt hat. +Y nach oben, gegenüber der Schwerkraft Platzieren Sie ein Objekt unter Verwendung der kompletten Geometrie auf einer Ebene (Boden oder Wand), wobei eine schnelle Platzierung entscheidend ist und das Erlebnis eine unbekannte anfängliche Tiefe und Größe tolerieren kann. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Führe einen Standard-Raycast aus

Rufen Sie ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) auf, um einen Raycast (Treffertest) durchzuführen. ARRaycastManager unterstützt alle 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.
}

Einen Raycast mit einer beliebigen Strahlung und Richtung durchführen

Raycasts werden normalerweise als Strahlen der Kamera des Geräts oder des Geräts behandelt. Sie können jedoch Raycast(Ray, List<ARRaycastHit>, TrackableType) verwenden, um einen Raycast mit einem beliebigen Strahl in Weltraumkoordinaten anstelle eines Bildschirmbereichspunkts durchzuführen.

Anker mit ARRaycastHit erstellen

Sobald du einen Raycast-Treffer hast, kannst du mit GameObject.AddComponent<ARAnchor> einen Anker erstellen und ihn als Komponente deinem GameObject hinzufügen. Verwende dabei den Raycast-Treffer als Eingabe. Die Komponente „ARAnchor“ aktualisiert kontinuierlich den Transform des Spielobjekts, sodass das Spielobjekt für das Trefferergebnis an die zugrunde liegende Trackable angehängt bleibt.

Persistente Raycasts (Sofortplatzierung)

Dauerhafte Raycasts verwenden eine Bildschirmposition und eine geschätzte Entfernung zu einer Oberfläche als Eingabe, um eine neue ARRaycast zu erstellen, mit der sich AR-Inhalte in deiner Szene platzieren lassen. In ARCore wird dies als Instant Placement bezeichnet.

Rufen Sie ARRaycastManager.AddRaycast() auf, um ein ARRaycast-Objekt zu erstellen, das automatisch aktualisiert wird, bis Sie ARRaycastManager.RemoveRaycast() aufrufen oder das ARRaycastManager-Element deaktivieren.

Anfänglich entspricht die Entfernung von ARRaycast der im AddRaycast()-Aufruf angegebenen Entfernung. Sobald ARCore die lokale Geometrie kartiert und eine sich überschneidende Ebene gefunden hat, wird die Entfernung in eine tatsächliche Entfernung aktualisiert. Die Änderung der Entfernung kann sich auf die scheinbare „Größe“ oder den wahrgenommenen Maßstab des Objekts auswirken.

Nächste Schritte