Executar raycasts no app Unity (AR Foundation)

Faça um raycast (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 hits

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

Tipo de resultado de hit Descrição Orientações Caso de uso Chamadas de método
Detalhes Usa informações de profundidade de toda a cena para determinar a profundidade e a orientação corretas de um ponto Perpendicular à superfície 3D Colocar um objeto virtual em uma superfície arbitrária (não apenas em pisos e paredes) O 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 do plano. Escala correta precisa 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 de toque do usuário para determinar a posição e a orientação corretas de um ponto. Perpendicular à superfície 3D Colocar um objeto em uma superfície arbitrária (não apenas em pisos e paredes) ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
Raycast permanente (posicionamento instantâneo) Usa o espaço da tela para posicionar o 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 Colocar um objeto em um plano (solo ou parede) usando a geometria completa do avião, em que o posicionamento rápido é fundamental e a experiência pode tolerar profundidade e 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.
}

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

Raycasts normalmente são tratados como raios da câmera do dispositivo ou da câmera, mas você pode usar Raycast(Ray, List<ARRaycastHit>, TrackableType) para conduzir um raycast usando um raio arbitrário nas coordenadas do espaço mundial em vez de um ponto na tela.

Criar uma âncora usando um ARRaycastHit

Depois de receber um hit de raycast, use o 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 ele permaneça anexado ao Trackable do resultado do hit.

Raycasts persistentes (posicionamento instantâneo)

Raycasts persistentes usam o local da tela e a distância estimada de uma superfície como entrada para criar um novo ARRaycast e colocar conteúdo de RA na cena. No ARCore, isso é conhecido como Posição instantânea.

Chame ARRaycastManager.AddRaycast() para criar um ARRaycast que vai continuar sendo atualizado automaticamente até que você chame ARRaycastManager.RemoveRaycast() ou desative o ARRaycastManager.

Inicialmente, a distância do ARRaycast vai ser a fornecida na chamada de 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 a escala percebida do objeto.

O que vem em seguida?