Effectuer des raycasts dans votre application Unity (AR Foundation)

Effectuez une diffusion de rayon (ou test de positionnement) pour déterminer la position correcte d'un objet 3D dans la scène. L'emplacement correct permet de s'assurer que le contenu en RA s'affiche à la taille (apparente) appropriée.

Types de résultats de l'appel

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

Type de résultat de l'appel Description Orientation Cas d'utilisation Appels de méthode
Profondeur Utilise les informations de profondeur de l'ensemble de la scène pour déterminer la profondeur et l'orientation correctes d'un point. Perpendiculaire à la surface 3D Placez un objet virtuel sur une surface arbitraire (pas seulement sur un sol ou un mur) Depth doit être activé pour que cela fonctionne.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Avion Intervient sur des surfaces horizontales et/ou verticales afin de déterminer la profondeur et l'orientation correctes d'un point Perpendiculaire à la surface 3D Placez un objet sur un plan (sol ou mur) en utilisant la géométrie complète du plan. Mise à l'échelle immédiate requise Remplacement du test de positionnement de profondeur ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Point caractéristique S'appuie sur les caractéristiques visuelles autour du point sur lequel 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 un sol ou un mur) 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. Fonctionne instantanément, mais la position et la profondeur réelle changeront une fois qu'ARCore sera en mesure de déterminer la géométrie réelle de la scène +Y pointant vers le haut, contrairement à la gravité Placer un objet sur un plan (sol ou mur) en utilisant la géométrie complète du plan ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Effectuer une diffusion 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 une diffusion à partir d'un rayon et d'une direction arbitraires

Les Raycasts sont généralement traités comme des rayons provenant de la caméra de l'appareil ou de l'appareil photo. Toutefois, vous pouvez utiliser Raycast(Ray, List<ARRaycastHit>, TrackableType) pour effectuer une diffusion de rayons arbitraires dans l'espace mondial 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 le hit de raycast comme entrée. Le composant ARAnchor met à jour en continu le Transform de l'objet de jeu, de sorte que celui-ci reste attaché au Trackable sous-jacent pour le résultat de l'appel.

Raycasts persistants (emplacement instantané)

Les raycasts persistants se basent sur la position de l'écran et la distance estimée par rapport à une surface pour créer un ARRaycast et insérer du contenu en RA dans votre scène. Dans ARCore, il s'agit de l'emplacement instantané.

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

Au départ, la distance de ARRaycast sera la distance fournie dans l'appel AddRaycast(). Une fois qu'ARCore a cartographié la géométrie locale et trouvé un plan croisé, la distance est mise à jour avec une distance réelle. La variation de la distance peut avoir une incidence sur la "taille" apparente ou échelle perçue de l'objet.

Étapes suivantes