Esegui raycast nella tua app Unity (AR Foundation)

Esegui un raycast, o hit test, per determinare la posizione corretta di un oggetto 3D nella scena. Un posizionamento corretto assicura che i contenuti AR vengano visualizzati con le dimensioni appropriate (apparenti).

Tipi di risultati di hit

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

Tipo di risultato di hit Descrizione Orientamento Caso d'uso Chiamate al metodo
Profondità Utilizza le informazioni di profondità provenienti dall'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) Depth deve essere abilitato affinché questa funzionalità funzioni.

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. Serve immediatamente la bilancia corretta. Fallback per l'hit test di profondità ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Caratteristica Si basa sulle caratteristiche visive attorno al punto di tocco dell'utente 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)
Persistent Raycast (posizionamento istantaneo) Utilizza lo spazio sullo schermo per posizionare i contenuti. Utilizza inizialmente la profondità stimata fornita dall'app. Funziona all'istante, ma la posa e la profondità effettiva cambieranno una volta che 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 dove il posizionamento rapido è fondamentale e l'esperienza può tollerare profondità e scala iniziali sconosciute ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Esegui una trasmissione a raycast standard

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

Condurre un raggio d'azione usando un raggio e una direzione arbitrari

I raggi Raycast vengono generalmente considerati come raggi provenienti dalla fotocamera del dispositivo o del dispositivo, ma puoi utilizzare Raycast(Ray, List<ARRaycastHit>, TrackableType) per condurre un raycast utilizzando un raggio arbitrario nelle coordinate spaziali anziché un punto dello spazio dello schermo.

Crea un ancoraggio utilizzando un ARRaycastHit

Una volta ottenuto un hit raycast, utilizza GameObject.AddComponent<ARAnchor> per creare un Ancoraggio e aggiungerlo come componente a GameObject, utilizzando l'hit raycast come input. Il componente ARAnchor aggiornerà continuamente il valore Transform dell'oggetto di gioco, in modo che l'oggetto di gioco rimanga collegato al Trackable sottostante per il risultato dell'hit.

Raycast permanenti (posizionamento istantaneo)

I raycast persistenti utilizzano la posizione dello schermo e una distanza stimata da una superficie come input per creare un nuovo ARRaycast per posizionare i contenuti AR nella scena. In ARCore, è noto come Posizionamento istantaneo.

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

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

Passaggi successivi