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, 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) |
Depth deve essere attivato per il funzionamento.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 il test di corrispondenza della 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 utilizza 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
I raycast vengono in genere 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 di raycast, utilizza GameObject.AddComponent<ARAnchor>
per creare un Anchor e aggiungilo come componente a GameObject
, utilizzando l'hit di raycast come input. Il componente ARAnchor
aggiorna continuamente il 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 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.