Guia do desenvolvedor sobre Posicionamento instantâneo para AR Foundation

Aprenda a usar a API Instant Placement ou raycasts persistentes, nos seus próprios apps.

Pré-requisitos

Verifique se você entendeu os conceitos fundamentais de RA e como configurar uma sessão do ARCore antes de continuar.

Nomes de conceitos

Os nomes de determinados conceitos e métodos podem ser diferentes entre a AR Foundation e o SDK do ARCore para Unity. Eles estão listados na tabela abaixo para facilitar a consulta.

Base de RA SDK do ARCore para Unity
Raycasts persistentes Posicionamento instantâneo
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Sem equivalência) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Pré-requisitos

Para seguir este guia, você precisa ter instalado e configurado o Unity. Caso contrário, consulte Introdução ao ARCore Extensions para AR Foundation para conferir as etapas de instalação e configuração.

Configurar uma nova sessão com ARRaycastManager

A Posição instantânea (raycasts persistentes) está disponível de forma imediata com o pacote AR Foundation. Siga estas etapas para configurar o cenário.

AR Foundation 4.x

  1. Adicione os objetos de jogo predefinidos AR Session Origin e AR Session.

  2. Adicione o componente AR Raycast Manager ao objeto de jogo AR Session Origin.

Quando o Raycast Prefab não for nulo, ARRaycastManager vai instanciar o prefab e sincronizar automaticamente a pose dele com a pose de ARRaycast.

AR Foundation 5.x

  1. Adicione os objetos de jogo predefinidos XR Origin e AR Session.

  2. Adicione o componente AR Raycast Manager ao objeto de jogo XR Origin.

Quando o Raycast Prefab não for nulo, ARRaycastManager vai instanciar o prefab e sincronizar automaticamente a pose dele com a pose de 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 em 3D precisa, o ARRaycast.trackingState será Tracking. Caso contrário, a ferramenta vai começar com Limited e fazer a transição para Tracking quando o ARCore tiver uma pose em 3D precisa. Quando o estado de acompanhamento se torna Tracking, ele não é revertido para Limited.