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 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 | Placer un objet virtuel sur une surface arbitraire (et 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 | 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)
|
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 peut déterminer la géométrie réelle de la scène. | +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 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 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, 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.