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 de 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 | Posicione um objeto em um plano (piso ou parede) usando a geometria completa do plano. É necessário corrigir a escala imediatamente. Substituição para o 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 | Colocar um objeto em um plano (piso ou parede) usando a geometria completa do plano, em que o posicionamento rápido é fundamental e a experiência pode tolerar profundidade e 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 TrackableType
s.
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.