Esegui raycast nella tua app Unity (AR Foundation)

Esegui un raycast o un test di hit per determinare il posizionamento corretto di un oggetto 3D nella scena. Il posizionamento corretto garantisce che i contenuti AR vengano visualizzati nelle dimensioni (apparenti) appropriate.

Tipi di risultati di hit

Un test di hit può produrre quattro diversi tipi di risultati di hit, come mostrato nella tabella seguente.

Tipo di risultato di hit Descrizione Orientamento Caso d'uso Chiamate di metodi
Profondità Utilizza le informazioni sulla profondità dell'intera scena per determinare la profondità e l'orientamento corretti di un punto Perpendicolare alla superficie 3D Posiziona un oggetto virtuale su una superficie arbitraria (non solo su pavimenti e pareti) Affinché questa operazione funzioni, Depth deve essere attivato.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Aereo Colpisce superfici orizzontali e/o verticali per determinare la profondità e l'orientamento corretti di un punto Perpendicolare alla superficie 3D Posiziona un oggetto su un piano (pavimento o parete) utilizzando la geometria completa del piano. È necessario correggere immediatamente la scala. Valore alternativo per l'area interessata da hit test Profondità ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punto di interesse Si basa su elementi visivi intorno al punto in cui un utente tocca per determinare la posizione e l'orientamento corretti di un punto Perpendicolare alla superficie 3D Posiziona un oggetto su una superficie arbitraria (non solo su pavimenti e pareti) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Raycast persistente (posizionamento istantaneo) Utilizza lo spazio sullo schermo per posizionare i contenuti. Inizialmente viene utilizzata la profondità stimata fornita dall'app. Funziona immediatamente, ma la posa e la profondità effettiva cambieranno quando ARCore sarà in grado di determinare la geometria effettiva della scena +Y rivolto verso l'alto, opposto alla gravità Posiziona un oggetto su un piano (pavimento o parete) utilizzando la geometria completa del piano quando il posizionamento rapido è fondamentale e l'esperienza può tollerare profondità e scala iniziali sconosciute ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Esegui un raycast standard

Chiama ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) per eseguire un raycast (hit-test). ARRaycastManager supporta tutti i 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.
}

Esegui un raycast utilizzando un raggio e una direzione arbitrari

In genere, i raycast vengono trattati come raggi provenienti dal dispositivo o dalla fotocamera del dispositivo, ma puoi utilizzare Raycast(Ray, List<ARRaycastHit>, TrackableType) per eseguire un raycast utilizzando un raggio arbitrario nelle coordinate dello spazio mondiale anziché un punto nello spazio dello schermo.

Creare un'ancora utilizzando un ARRaycastHit

Una volta ottenuto un hit del raycast, utilizza GameObject.AddComponent<ARAnchor> per creare un ancora e aggiungilo come componente a GameObject, utilizzando l'hit del raycast come input. Il componente ARAnchor aggiorna continuamente il Transform dell'oggetto di gioco, in modo che l'oggetto di gioco rimanga associato al Trackable sottostante per il risultato della hit.

Raycast permanenti (posizionamento istantaneo)

I raycast permanenti utilizzano una posizione sullo schermo e una distanza stimata da una superficie come input per creare un nuovo ARRaycast per posizionare contenuti AR nella scena. In ARCore, questa funzionalità è nota come Posizionamento istantaneo.

Chiama ARRaycastManager.AddRaycast() per creare un ARRaycast che continua ad aggiornarsi automaticamente finché non chiami ARRaycastManager.RemoveRaycast() o disattivi il ARRaycastManager.

Inizialmente, la distanza di ARRaycast sarà quella fornita nella chiamata AddRaycast(). Una volta che ARCore ha mappato la geometria locale e trovato un piano intersecante, la distanza viene aggiornata in base alla distanza effettiva. La variazione di distanza può influire sulle "dimensioni" apparenti o sulla scala percepita dell'oggetto.

Passaggi successivi