Realiza una raycast o prueba de intersección 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 (aparente) adecuado.
Tipos de resultados de hits
Una prueba de hit puede generar 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 la 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 orientación correctas de un punto. | Perpendicular a la superficie 3D | Coloca un objeto en un plano (piso o pared) con la geometría completa del plano. Se necesita la escala correcta de inmediato. Resguardo para la prueba de profundidad |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
Punto de referencia | Se basa en características visuales alrededor del punto en el que el usuario presiona para determinar la posición y la orientación correctas de un punto. | Perpendicular a la superficie 3D | Coloca un objeto en una superficie arbitraria (no solo en pisos y paredes) |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
Raycast persistente (ubicación instantánea) | Usa el espacio de la pantalla para colocar el contenido. En un principio, usa la profundidad estimada que proporciona la app. Funciona de inmediato, pero la pose y la profundidad real cambiarán una vez que ARCore pueda determinar la geometría real de la escena. | +Y apunta hacia arriba, opuesto a la gravedad | Coloca un objeto en un plano (piso o pared) con la geometría completa del plano cuando la colocación rápida es fundamental y la experiencia puede tolerar una profundidad y escala iniciales desconocidas. |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
Realiza un rayo estándar
Llama a ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
para realizar un raycast (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.
}
Realiza un raycast con un rayo y una dirección arbitrarios
Por lo general, los rayos de proyección se tratan como rayos del dispositivo o de la cámara del dispositivo, pero puedes usar Raycast(Ray, List<ARRaycastHit>, TrackableType)
para realizar un rayo de proyección con un rayo arbitrario en coordenadas de espacio mundial en lugar de un punto de espacio de pantalla.
Crea un ancla con un ARRaycastHit
Una vez que tengas un hit de raycast, usa GameObject.AddComponent<ARAnchor>
para crear un anclaje y agrégalo como componente a tu GameObject
. Para ello, usa el hit de raycast como entrada. El componente ARAnchor
actualizará continuamente el Transform
del objeto del juego para que este permanezca conectado al Trackable
subyacente para el resultado del hit.
Raycasts persistentes (ubicación instantánea)
Los raycasts persistentes usan una ubicación de pantalla y una distancia estimada a una superficie como entrada para crear un ARRaycast
nuevo para colocar contenido de RA en tu escena. En ARCore, esto se conoce como Ubicación instantánea.
Llama a ARRaycastManager.AddRaycast()
para crear un ARRaycast
que se siga actualizando automáticamente hasta que llames a ARRaycastManager.RemoveRaycast()
o inhabilites ARRaycastManager
.
Inicialmente, la distancia de ARRaycast
será la que se proporcionó en la llamada a AddRaycast()
. Una vez que ARCore haya asignado la geometría local y haya encontrado un plano que se cruza, la distancia se actualizará a una distancia real. El cambio en la distancia puede afectar el "tamaño" aparente o la escala percibida del objeto.