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.