Guia do desenvolvedor sobre Posicionamento instantâneo para AR Foundation

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

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

  2. 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

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

  2. 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