Führen Sie einen raycast oder einen Treffertest durch, um die korrekte Platzierung eines 3D-Objekts in Ihrer Szene zu bestimmen. Durch die richtige Platzierung werden die AR-Inhalte in der richtigen (scheinbaren) Größe gerendert.
Trefferergebnistypen
Ein Treffertest kann vier verschiedene Arten von Trefferergebnissen liefern, wie in der folgenden Tabelle dargestellt.
Trefferergebnistyp | Beschreibung | Ausrichtung | Anwendungsfall | Methodenaufrufe |
---|---|---|---|---|
Tiefe | Ermittelt anhand von Tiefeninformationen aus der gesamten Szene die korrekte Tiefe und Ausrichtung eines Punkts. | Senkrecht zur 3D-Oberfläche | Virtuelle Objekte auf einer beliebigen Oberfläche platzieren (nicht nur auf Böden und Wänden) |
Dies funktioniert nur, wenn Depth aktiviert ist.ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
Flugzeug | Trifft auf horizontale und/oder vertikale Oberflächen, um die richtige 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. Die richtige Skalierung ist sofort erforderlich. Fallback für den Tiefen-Treffertest |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
Punktelement | Nutzt visuelle Merkmale um den Punkt herum, an dem ein Nutzer getippt hat, um die richtige Position und Ausrichtung eines Punkts zu bestimmen | Senkrecht zur 3D-Oberfläche | Objekte auf einer beliebigen Oberfläche platzieren (nicht nur auf Böden und Wänden) |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Persistent Raycast (Sofortiges Placement) | Nutzt den gesamten Bildschirm für die Platzierung von Inhalten. Zuerst wird die von der App geschätzte Tiefe verwendet. Funktioniert sofort, aber Haltung und tatsächliche Tiefe ändern sich, sobald ARCore die tatsächliche Szenengeometrie bestimmen kann. | +Y nach oben, entgegen der Schwerkraft | Platzieren Sie ein Objekt auf einer Ebene (Boden oder Wand) unter Verwendung der vollständigen Geometrie der Ebene, wenn eine schnelle Platzierung entscheidend ist und die Oberfläche unbekannte Anfangstiefe und -skala zulassen kann. |
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 in der Regel als Strahlen vom Gerät oder von der Gerätekamera behandelt. Mit Raycast(Ray, List<ARRaycastHit>, TrackableType)
können Sie jedoch einen Raycast mit einem beliebigen Strahl in Weltraumkoordinaten anstelle eines Bildschirmraumpunkts ausführen.
Mit ARRaycastHit
einen Anker erstellen
Sobald Sie einen Raycast-Treffer haben, erstellen Sie mit GameObject.AddComponent<ARAnchor>
einen Anchor und fügen Sie ihn als Komponente zu GameObject
hinzu. Verwenden Sie dabei den Raycast-Treffer als Eingabe. Die ARAnchor
-Komponente aktualisiert kontinuierlich den Transform
des Spielobjekts, damit das Spielobjekt für das Trefferergebnis mit dem zugrunde liegenden Trackable
verbunden bleibt.
Persistente Raycasts (Instant Placement)
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.
Die Entfernung der ARRaycast
entspricht anfangs der Entfernung, die im AddRaycast()
-Aufruf angegeben wurde. Sobald ARCore die lokale Geometrie kartografiert und eine sich schneidende Ebene gefunden hat, wird die Entfernung auf die tatsächliche Entfernung aktualisiert. Die Abstandsänderung kann sich auf die sichtbare „Größe“ oder die wahrgenommene Größe des Objekts auswirken.