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

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 TrackableTypes.

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.

Weiteres Vorgehen