Saiba como usar o API Instant Placement ou raycasts persistentes (link em inglês) nos seus próprios apps.
Pré-requisitos
Entenda os conceitos fundamentais de RA. e como configurar uma sessão do ARCore antes de continuar.
Nomes de conceito
Os nomes de certos conceitos e métodos podem ser diferentes entre a AR Foundation e a SDK do ARCore para Unity. Elas estão listadas na tabela abaixo para fácil referência.
Fundamentos de RA | SDK do ARCore para Unity |
Raycasts persistentes | Canal instantâneo |
ARRaycastManager.AddRaycast(Vector2, float)
|
Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
|
ARRaycast
|
TrackableHit
|
(Sem equivalência) | InstantPlacementPoint
|
ARRaycast.trackingState
|
InstantPlacementPointTrackingMethod
|
Pré-requisitos
Este guia pressupõe que você já instalou e configurou o Unity. Caso contrário, consulte o curso Getting Started with ARCore Extensions for AR Foundation (em inglês). para conhecer as etapas de instalação e configuração.
Configurar uma nova sessão com ARRaycastManager
O posicionamento instantâneo (raycasts persistentes) está pronto para uso com a RA Pacote básico. Siga estas etapas para configurar seu cenário.
Base de RA 4.x
Adicione os objetos de jogo predefinidos AR Session Origin e AR Session.
Adicione o componente AR Raycast Manager ao Objeto do jogo AR Session Origin.
Quando o Raycast Prefab não é nulo, o ARRaycastManager
instanciará o prefab e sincronizará automaticamente sua posição com a pose do
ARRaycast
Base de RA 5.x
Adicione os objetos de jogo predefinidos XR Origin e AR Session.
Adicione o componente AR Raycast Manager ao Objeto do jogo XR Origin.
Quando o Raycast Prefab não é nulo, o ARRaycastManager
instanciará o prefab e sincronizará automaticamente sua posição com a pose do
ARRaycast
Colocar um objeto
Em uma nova sessão do ARCore, faça um teste de hit usando
ARRaycastManager.AddRaycast(Vector2, float)
public ARRaycastManager RaycastManager; // set from the Editor Inspector.
void Update()
{
Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
return;
}
if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
return;
}
ARRaycast raycast = RaycastManager.AddRaycast(touch.position, _estimateDistance);
if (raycast != null)
{
// You can instantiate a 3D object here if you haven’t set Raycast Prefab in the scene.
…
}
}
Monitorar o estado de rastreamento do ARRaycast
Se o ARCore tiver uma pose 3D precisa, o ARRaycast.trackingState
será Tracking
.
Caso contrário, começará com Limited
.
e faça a transição para Tracking
assim que o ARCore tiver uma pose 3D precisa. Quando o estado de rastreamento passar a ser Tracking
,
ele não será revertido para
Limited