Esegui raycast nella tua app Unity (AR Foundation)

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

Tipi di risultati relativi agli hit

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

Tipo di risultato hit Descrizione Orientamento Caso d'uso Chiamate al metodo
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é funzioni, è necessario attivare Depth.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Aereo Colpisce le 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 muro) utilizzando l'intera geometria dell'aereo. È necessaria immediatamente la bilancia corretta. Riserva per l'hit test di profondità ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punto caratteristica Si basa su caratteristiche visive intorno al punto del tocco di un 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)
Raycast permanente (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 rivolta verso l'alto, in posizione opposta alla gravità Posiziona un oggetto su un piano (pavimento o muro) utilizzando l'intera geometria dell'aereo, dove 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.
}

Condurre un raycast utilizzando un raggio e una direzione arbitrari

I Raycast vengono generalmente trattati 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 del mondo anziché un punto nello spazio sullo schermo.

Crea un ancoraggio utilizzando un ARRaycastHit

Una volta ottenuto un hit raycast, usa GameObject.AddComponent<ARAnchor> per creare un anchor e aggiungerlo come componente a GameObject, utilizzando l'hit raycast come input. Il componente ARAnchor aggiorna continuamente il Transform dell'oggetto game, in modo che quest'ultimo rimanga collegato al Trackable sottostante per ottenere il risultato dell'hit.

Raycast permanenti (posizionamento istantaneo)

I raycast permanenti utilizzano una posizione sullo schermo e una stima della distanza da una superficie come input per creare un nuovo ARRaycast per posizionare contenuti AR nella scena. In ARCore, è noto come posizionamento istantaneo.

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

Inizialmente, la distanza di ARRaycast sarà quella fornita nella chiamata AddRaycast(). Dopo che ARCore ha mappato la geometria locale e trovato un piano di intersezione, la distanza viene aggiornata a una distanza effettiva. La variazione della distanza può influire sulle "dimensioni" apparenti o percepita come dimensione dell'oggetto.

Passaggi successivi