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.