Executar raycasts no app Unity (AR Foundation)

Execute um raycast ou teste de colisão para determinar a posição correta de um objeto 3D na cena. A posição correta garante que o conteúdo de RA seja renderizado no tamanho (aparente) adequado.

Tipos de resultados de hit

Um hit-test 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 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) Depth precisa estar ativado para que isso funcione.

ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
Avião Bate em superfícies horizontais e/ou verticais para determinar a profundidade e a orientação corretas de um ponto Perpendicular à superfície 3D Coloque um objeto em um plano (solo ou parede) usando a geometria completa dele. É necessário corrigir a escala imediatamente. Substituto do teste de hit de profundidade ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
Ponto de elemento Depende de 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 persistente (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 vão mudar quando o ARCore puder determinar a geometria real da cena. +Y apontando para cima, oposto à gravidade Coloque um objeto em um plano (solo ou parede) usando a geometria completa 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)

Realizar um raycast padrão

Chame ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType) para realizar um raycast (teste de hit). O 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

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

Criar uma âncora usando um ARRaycastHit

Depois de ter um acerto de raycast, use GameObject.AddComponent<ARAnchor> para criar uma âncora e adicioná-la como um componente ao GameObject, usando o acerto de raycast como entrada. O componente ARAnchor atualiza continuamente o Transform do objeto do jogo para que ele permaneça anexado ao Trackable subjacente para o resultado do hit.

Raycasts persistentes (colocação instantânea)

Os raycasts persistentes usam um local da tela e uma distância estimada para 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 um ARRaycast que continue sendo atualizado automaticamente até que você chame ARRaycastManager.RemoveRaycast() ou desative o ARRaycastManager.

Inicialmente, a distância da ARRaycast será a distância fornecida na chamada AddRaycast(). Depois que o ARCore mapeia a geometria local e encontra um plano de interseção, a distância é 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?