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) |
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 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, 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.
}
Raycast mit einem beliebigen Strahl und einer beliebigen Richtung ausfü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.
Anker mit einem ARRaycastHit
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)
Bei persistenten Raycasts werden eine Bildschirmposition und eine geschätzte Entfernung zu einer Oberfläche als Eingabe verwendet, um eine neue ARRaycast
zu erstellen, mit der AR-Inhalte in Ihrer Szene platziert werden. In ARCore wird dies als Instant Placement bezeichnet.
Rufe ARRaycastManager.AddRaycast()
auf, um eine ARRaycast
zu erstellen, die automatisch aktualisiert wird, bis du ARRaycastManager.RemoveRaycast()
aufrufst oder die ARRaycastManager
deaktivierst.
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 Entfernung kann sich auf die scheinbare Größe oder den wahrgenommenen Maßstab des Objekts auswirken.