Executar raycasts no app Unity (AR Foundation)

Faça um raycast, ou teste de hit, para determinar o posicionamento correto de um objeto 3D na sua cena. O posicionamento correto garante que o conteúdo de RA seja renderizado no tamanho adequado (aparente).

Tipos de resultados de hit

Um teste de hit pode gerar quatro tipos diferentes de resultados de hit, conforme mostrado na tabela a seguir.

Tipo de resultado do hit Descrição Orientação Caso de uso Chamadas de método
Profundidade Usa informações de profundidade de toda a cena para determinar a profundidade e orientação corretas de um ponto. Perpendicular à superfície 3D colocar um objeto virtual em uma superfície arbitrária (não apenas no chão e nas paredes); Depth precisa estar ativado para que isso funcione.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Avião Atinge superfícies horizontais e/ou verticais para determinar a profundidade e orientação corretas de um ponto Perpendicular à superfície 3D Coloque um objeto em um plano (solo ou parede) usando a geometria completa dele. Precisa da balança correta imediatamente. Substituto do teste de hit de profundidade ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Ponto do elemento Baseia-se em recursos visuais ao redor do ponto em que o usuário toca para determinar a posição e orientação corretas de um ponto. Perpendicular à superfície 3D colocar um objeto em uma superfície arbitrária (não apenas no chão e nas paredes); ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Raycast persistente (posicionamento instantâneo) Usa o espaço na tela para posicionar conteúdo. Inicialmente, usa a profundidade estimada fornecida pelo app. Funciona instantaneamente, mas a pose e a profundidade real mudam quando o ARCore consegue determinar a geometria real da cena +Y apontando para cima, oposto à gravidade Coloque um objeto em um plano (solo ou parede) usando a geometria total dele. Nesse local, o posicionamento rápido é essencial, e a experiência pode tolerar a profundidade e a escala iniciais desconhecidas ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)

Executar um raycast padrão

Chame ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) para executar um raycast (hit-test). ARRaycastManager oferece suporte a todos os TrackableTypes.

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.
}

Conduzir um raycast usando um raio e uma direção arbitrários

Os raycasts geralmente são tratados como raios da câmera do dispositivo ou do dispositivo, mas é possível usar Raycast(Ray, List<ARRaycastHit>, TrackableType) para conduzir um raycast usando um raio arbitrário em coordenadas do espaço mundial em vez de um ponto de espaço da tela.

Criar uma âncora usando um ARRaycastHit

Quando você tiver um hit de raycast, use GameObject.AddComponent<ARAnchor> para criar uma Âncora e adicioná-la como um componente ao seu GameObject usando o hit de raycast como entrada. O componente ARAnchor atualiza continuamente o Transform do objeto do jogo para que esse objeto permaneça anexado ao Trackable subjacente do resultado do hit.

Raycasts persistentes (posicionamento instantâneo)

Os raycasts persistentes usam o local da tela e uma distância estimada até uma superfície como entrada para criar um novo ARRaycast e colocar conteúdo de RA na cena. No ARCore, isso é conhecido como Posicionamento instantâneo.

Chame ARRaycastManager.AddRaycast() para criar uma ARRaycast que continua sendo atualizada automaticamente até você chamar ARRaycastManager.RemoveRaycast() ou desativar a ARRaycastManager.

Inicialmente, a distância de ARRaycast será a distância fornecida na chamada AddRaycast(). Depois que o ARCore mapear a geometria local e encontrar um plano de interseção, a distância será atualizada para uma distância real. A mudança na distância pode afetar o "tamanho" aparente ou escala percebida do objeto.

O que vem em seguida?