Effectuez un raycast (ou test de collision) pour déterminer l'emplacement correct d'un objet 3D dans votre scène. Un emplacement correct garantit que le contenu RA est affiché à la taille (apparente) appropriée.
Types de résultats des appels
Un test de contact 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 | Placer un objet virtuel sur une surface arbitraire (et pas seulement sur les sols et les murs) |
Pour que cela fonctionne, Depth doit être activé.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 "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)
|
Raycast persistant (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 de la scène réelle. | +Y pointant vers le haut, à l'opposé de 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 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 raycasts 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 de l'espace mondial au lieu d'un point dans l'espace de l'écran.
Créer une ancre à l'aide d'un ARRaycastHit
Une fois qu'un rayon a touché un élément, utilisez GameObject.AddComponent<ARAnchor>
pour créer un ancrage et l'ajouter en tant que composant à votre GameObject
, en utilisant le rayon comme entrée. Le composant ARAnchor
met à jour en continu la Transform
de l'objet de jeu afin que celui-ci reste associé à la Trackable
sous-jacente pour le résultat de l'impact.
Raycasts persistants (positionnement instantané)
Les raycasts persistants utilisent un emplacement à l'écran et une distance estimée à une surface comme entrée pour créer un ARRaycast
afin de placer du contenu RA dans votre scène. Dans ARCore, cette fonctionnalité est appelée Placement 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 l'ARRaycast
correspond à la distance fournie dans l'appel AddRaycast()
. Une fois qu'ARCore a cartographié la géométrie locale et trouvé un plan d'intersection, la distance est remplacée par une distance réelle. La modification de la distance peut affecter la "taille" apparente ou l'échelle perçue de l'objet.