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

Entenda os conceitos básicos 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. Elas estão listadas na tabela abaixo para fácil referência.

Fundamentos da 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

Este guia pressupõe que você já instalou e configurou o Unity. Caso contrário, consulte Primeiros passos com as extensões do ARCore para a 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 com o pacote AR Foundation. 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 de jogo AR Session Origin.

Quando o prefab do Raycast não é nulo, ARRaycastManager instancia o prefab e sincroniza automaticamente a pose dele com a pose de 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 de jogo XR Origin.

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

Colocar um objeto

Em uma nova sessão do ARCore, execute 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, ele vai começar com Limited e fazer a transição para Tracking quando o ARCore tiver uma pose 3D precisa. Quando o estado de rastreamento se torna Tracking, ele não volta para Limited.