Effectuez un raycast (ou test de collision) pour déterminer l'emplacement correct d'un objet 3D dans votre 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 des appels
Un test de collision peut générer quatre types de résultats différents, comme indiqué dans 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 | Frappe des surfaces horizontales et/ou verticales pour déterminer la profondeur et l'orientation correctes d'un point | Perpendiculaire à la surface 3D | Placez un objet sur un plan (sol ou mur) à l'aide de la géométrie complète du plan. Besoin d'une échelle correcte immédiatement. Solution de remplacement pour le test de positionnement en profondeur |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
Point d'intérêt | S'appuie sur des éléments visuels 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 (et pas seulement sur le sol ou 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. Fonctionne instantanément, mais la pose 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, contrairement à la gravité | Placer un objet sur un plan (sol ou mur) à l'aide de la géométrie complète du plan lorsque le placement rapide est essentiel et que l'expérience peut tolérer une profondeur et une échelle initiales inconnues |
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 un raycast à l'aide 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 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 avez détecté un impact de rayon, utilisez GameObject.AddComponent<ARAnchor>
pour créer une ancre et l'ajouter en tant que composant à votre GameObject
, en utilisant l'impact de rayon comme entrée. Le composant ARAnchor
met à jour en continu le Transform
de l'objet de jeu afin que l'objet de jeu reste associé au Trackable
sous-jacent pour le résultat de l'impact.
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, on parle de positionnement instantané.
Appelez ARRaycastManager.AddRaycast()
pour créer un ARRaycast
qui continue de se mettre à jour automatiquement jusqu'à ce que vous appeliez ARRaycastManager.RemoveRaycast()
ou désactiviez ARRaycastManager
.
Au départ, la distance de ARRaycast
correspond à celle fournie dans l'appel AddRaycast()
. Une fois qu'ARCore a cartographié la géométrie locale et trouvé un plan qui intersecte, la distance est remplacée par une distance réelle. La variation de distance peut affecter la "taille" apparente ou l'échelle perçue de l'objet.