Effectuer des raycasts dans votre application Unity (AR Foundation)

Effectuez un raycast (test de positionnement) pour déterminer l'emplacement correct d'un objet 3D dans votre scène. Un placement correct permet de s'assurer que le contenu de la RA est affiché à la taille (apparente) appropriée.

Types de résultats d'appel

Un test de positionnement peut générer quatre types de résultats d'appel différents, comme l'illustre le tableau suivant.

Type de résultat du hit Description Intégration Cas d'utilisation Appels de méthode
Précision Utilise les informations de profondeur de toute la scène pour déterminer la profondeur et l'orientation d'un point Perpendiculaire à la surface 3D Placer un objet virtuel sur une surface arbitraire (pas seulement sur les sols et les murs) Depth doit être activé pour que cela fonctionne.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Avion Appuie sur les surfaces horizontales et/ou verticales pour déterminer la profondeur et l'orientation d'un point Perpendiculaire à la surface 3D Placez un objet sur une surface plane (plancher ou mur) en utilisant toute la géométrie de l'avion. J'ai immédiatement besoin de la bonne échelle. Remplacement pour le test de positionnement de profondeur ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Point d'intérêt S'appuie sur les caractéristiques visuelles autour du point où l'utilisateur appuie pour déterminer la position et l'orientation correctes d'un point Perpendiculaire à la surface 3D Placer un objet sur une surface arbitraire (pas seulement sur les sols et les murs) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Persistent Raycast (emplacement instantané) Utilise l'espace à l'écran pour placer le contenu. Utilise initialement la profondeur estimée fournie par l'application. Le fonctionnement est instantané, mais la position et la profondeur réelle changent une fois qu'ARCore est en mesure de déterminer la géométrie réelle de la scène. +Y pointant vers le haut, à l'opposé de la gravité Placez un objet sur une surface plane (plancher ou paroi) en utilisant sa géométrie complète. Pour que l'expérience puisse tolérer une profondeur et une échelle initiales inconnues, le positionnement doit être rapide. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Effectuer un raycast standard

Appelez ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) pour effectuer un raycast (test de positionnement). ARRaycastManager est compatible avec tous les 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.
}

Effectuer un raycast à l'aide d'un rayon et d'une direction arbitraires

Les rayons diffusés sont généralement traités comme des rayons provenant de l'appareil ou de la caméra de l'appareil, mais vous pouvez utiliser Raycast(Ray, List<ARRaycastHit>, TrackableType) pour effectuer un raycast à l'aide d'un rayon arbitraire dans les coordonnées spatiales du monde au lieu d'un point d'espace d'écran.

Créer une ancre à l'aide d'un ARRaycastHit

Une fois que vous disposez d'un hit de raycast, utilisez GameObject.AddComponent<ARAnchor> pour créer une ancre et ajoutez-la en tant que composant à votre GameObject, en utilisant l'appel raycast comme entrée. Le composant ARAnchor met continuellement à jour le Transform de l'objet de jeu, afin que l'objet de jeu reste associé à la Trackable sous-jacente pour le résultat du hit.

Raycasts persistants (emplacement instantané)

Les raycasts persistants utilisent la position de l'écran et une distance estimée à une surface comme entrée pour créer un nouveau ARRaycast permettant de placer le contenu RA dans votre scène. Dans ARCore, c'est ce que nous appelons l'emplacement instantané.

Appelez ARRaycastManager.AddRaycast() pour créer un ARRaycast qui se met à jour automatiquement jusqu'à ce que vous appelez ARRaycastManager.RemoveRaycast() ou désactivez ARRaycastManager.

Au départ, la distance du ARRaycast sera la distance fournie dans l'appel AddRaycast(). Une fois qu'ARCore a cartographié la géométrie locale et détecté un plan qui se croise, la distance est mise à jour et correspond à une distance réelle. Le changement de distance peut affecter la « taille » apparente ou l'échelle perçue de l'objet.

Et ensuite ?