Realiza transmisiones de rayos en tu app de Unity (AR Foundation)

Realiza una castillo de rayos, o prueba de posicionamiento, para determinar la ubicación correcta de un objeto 3D en tu escena. La posición correcta garantiza que el contenido de RA se renderice en el tamaño adecuado (aparente).

Tipos de resultados de hits

Una prueba de posicionamiento puede producir cuatro tipos diferentes de resultados de hit, como se muestra en la siguiente tabla.

Tipo de resultado de hit Descripción Orientación Caso de uso de llamadas a métodos
Profundidad Usa información de profundidad de toda la escena para determinar la profundidad y la orientación correctas de un punto Perpendicular a la superficie 3D Coloca un objeto virtual en una superficie arbitraria (no solo en pisos y paredes). Depth debe estar habilitado para que esto funcione.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Avión Golpea superficies horizontales o verticales para determinar la profundidad y la orientación correctas del punto Perpendicular a la superficie 3D Coloca un objeto en un plano (suelo o pared) con la geometría completa del plano. Se necesita la báscula correcta de inmediato. Resguardo para la prueba de posicionamiento de profundidad ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Punto destacado Se basa en las características visuales del punto en que el usuario presiona para determinar la posición y la orientación correctas de un punto. Perpendicular a la superficie 3D Colocar un objeto sobre una superficie arbitraria (no solo en pisos y paredes) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Raycast persistente (posición instantánea) Usa espacio de la pantalla para colocar contenido. Inicialmente, se usa la profundidad estimada que proporciona la app. Funciona al instante, pero la posición y la profundidad real cambiarán una vez que ARCore pueda determinar la geometría real de la escena. +Y apuntando hacia arriba, opuesto a la gravedad Coloca un objeto en un plano (suelo o pared) con la geometría completa del plano donde la ubicación rápida es fundamental y la experiencia pueda tolerar una profundidad y una escala iniciales desconocidas. ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Realiza una proyección de rayos estándar

Llama a ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) para realizar una proyección de rayos (prueba de posicionamiento). ARRaycastManager admite todos los 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.
}

Lleva a cabo una proyección de rayos con una dirección y un rayo arbitrarios

Las transmisiones de rayos normalmente se tratan como rayos provenientes de la cámara del dispositivo o del dispositivo, pero puedes usar Raycast(Ray, List<ARRaycastHit>, TrackableType) para realizar una proyección de rayos mediante una raya arbitraria en coordenadas de espacio mundial en lugar de un punto de espacio en pantalla.

Crea un ancla con un ARRaycastHit

Una vez que tengas un impacto de rayos, usa GameObject.AddComponent<ARAnchor> para crear un Anchor y agregarlo como componente a tu GameObject. Para ello, usa el hit de proyección de rayos como entrada. El componente ARAnchor actualizará de manera continua el Transform del objeto del juego, de modo que permanezca adjunto al Trackable subyacente para el resultado del hit.

Proyecciones de rayos persistentes (posición instantánea)

Las proyecciones de rayos persistentes usan una ubicación de la pantalla y una distancia estimada a una superficie como entrada para crear una nueva ARRaycast a fin de colocar contenido de RA en tu escena. En ARCore, esto se conoce como posición instantánea.

Llama a ARRaycastManager.AddRaycast() para crear una ARRaycast que se siga actualizando automáticamente hasta que llames a ARRaycastManager.RemoveRaycast() o inhabilites ARRaycastManager.

Inicialmente, la distancia de ARRaycast será la distancia proporcionada en la llamada a AddRaycast(). Una vez que ARCore mapea la geometría local y encuentra un plano de intersección, la distancia se actualiza a una distancia real. El cambio en la distancia puede afectar el "tamaño" aparente o la escala percibida del objeto.

¿Qué sigue?