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 muro) utilizzando l'intera geometria dell'aereo. È 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 permanente (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 di raycast, utilizza GameObject.AddComponent<ARAnchor>
per creare un ancora 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 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 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()
. 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.