Руководство разработчика Instant Placement для AR Foundation

Узнайте, как использовать Instant Placement API или постоянные лучевые передачи в своих приложениях.

Предварительные условия

Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .

Названия концепций

Названия некоторых концепций и методов могут различаться в AR Foundation и ARCore SDK для Unity. Для удобства они перечислены в таблице ниже.

Фонд АР ARCore SDK для Unity
Постоянные лучи Мгновенное размещение
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(Нет эквивалента) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

Предварительные условия

В этом руководстве предполагается, что вы уже установили и настроили Unity. Если нет, ознакомьтесь с инструкциями по установке и настройке в разделе «Начало работы с расширениями ARCore для AR Foundation» .

Настройте новый сеанс с помощью ARRaycastManager

Мгновенное размещение (постоянные лучи) доступно «из коробки» в пакете AR Foundation. Выполните следующие шаги, чтобы настроить сцену.

AR Фонд 4.x

  1. Добавьте предопределённые игровые объекты AR Session Origin и AR Session .

  2. Добавьте компонент AR Raycast Manager в игровой объект AR Session Origin .

Если Raycast Prefab не равен нулю, ARRaycastManager создаст экземпляр префаба и автоматически синхронизирует его положение с положением ARRaycast .

AR Фонд 5.x

  1. Добавьте предопределенные игровые объекты XR Origin и AR Session .

  2. Добавьте компонент AR Raycast Manager в игровой объект XR Origin .

Если Raycast Prefab не равен нулю, ARRaycastManager создаст экземпляр префаба и автоматически синхронизирует его положение с положением ARRaycast .

Поместите объект

В новом сеансе ARCore выполните проверку попадания с помощью 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.
        
    }
}

Отслеживайте состояние отслеживания ARRaycast

Если ARCore имеет точную 3D-позу, ARRaycast.trackingState будет Tracking . В противном случае он начнется с Limited и перейдет в Tracking как только ARCore получит точную трехмерную позу. Как только состояние отслеживания станет Tracking , оно не вернется к Limited .