В сегодняшней статье мы немного поговорим про ARFoundation и напишем простое приложение, чтобы изучить базовый функционал этой технологии дополненной реальности.
![](https://habrastorage.org/getpro/habr/upload_files/ead/14f/f27/ead14ff2799840dbbb49808519e4c448.png)
аAR Foundation позволяет вам работать с платформами дополненной реальности на нескольких платформах в Unity. Этот пакет предоставляет интерфейс для использования разработчиками Unity, но сам не реализует какие-либо функции дополненной реальности. Чтобы использовать AR Foundation на целевом устройстве, вам также потребуются отдельные пакеты для целевых платформ, официально поддерживаемых Unity:
-
ARCore XR для Android
-
ARKit XR для iOS
-
MagicLeap XR для MagicLeap
-
Windows XR для HoloLens
Вкратце: ARFoundation — это набор скриптов для работы с дополненной реальностью, позволяющий Вам отслеживать устройство в пространстве, обнаружать горизонтальные и вертикальные поверхности, обнаружать и отслеживать 2D изображения, 3D объекты, лица и т.п.
В чём плюсы ARFoundation? Единый API для нескольких платформ, в частности наиболее популярных и интересующих нас: iOS и Android.
Настройка проекта
Для начала создадим пустой 3D Unity проект. Не будем пользоваться AR шаблоном чтобы полностью пройти путь настройки проекта и понимать, что к чему. Unity я буду использовать 2021.3.9f1.
![](https://habrastorage.org/getpro/habr/upload_files/c0d/dee/809/c0ddee80950ccfc98faeb4580370cc1d.png)
Далее, перейдем в Package Manager и установим необходимые для разработки на ARFoundation пакеты: нам потребуется сам пакет ARFoundation и любой из доступных провайдеров (для Android это ARCore XR Plugin, для iOS это ARKit XR Plugin). Я буду использовать провадйер ARKit XR Plugin.
![](https://habrastorage.org/getpro/habr/upload_files/1b0/3fd/201/1b03fd20114e982aa167c38619386ca4.png)
Далее, включим ARKit (или ARCore) плагин в настройках XR Plug-in Management. Для этого откроем окно Project Settings, перейдем на вкладку XR Plug-in Management и поставим галочку напротив соответствующего плагина-провайдера ARFoundation.
![](https://habrastorage.org/getpro/habr/upload_files/a52/f98/269/a52f9826920cfeca2322fd4d46132424.png)
Для пользователей iPhone и, соответственно, ARKit XR Plugin, необходимо также прописать описание предназначения использования камеры в приложении. Это можно сделать в Project Settings, на вкладке Player Settings в поле Camera Usage Description.
![](https://habrastorage.org/getpro/habr/upload_files/48d/d9e/c1c/48dd9ec1c2e6adf4246b2de01683da72.png)
На этом этапе можно считать, что проект подготовлен для работы с ARFoundation.
Настройка сцены
Чтобы начать работу с AR, необходимо подготовить сцену соответствующим образом. Нам потребуются два основных компонента, AR Session Origin и AR Session.
Удалим Main Camera со сцены и создадим необходимые компоненты в виде отдельных объектов. Начнем с AR Session Origin — источника сессии дополненной реальности.
Целью ARSessionOrigin
является преобразование отслеживаемых объектов, таких как плоские поверхности и характерные точки, в их конечное положение, ориентацию и масштаб в сцене Unity. Поскольку устройства AR предоставляют свои данные в немасштабируемым пространством относительно начала сеанса дополненной реальности, ARSessionOrigin
выполняется соответствующее преобразование в пространство Unity.
Чтобы создать AR Session Origin, мы должны кликнуть правой кнопки мыши по вкладке управления иерархией и нажать на пункт XR/AR Session Origin.
![](https://habrastorage.org/getpro/habr/upload_files/e50/9e1/a8c/e509e1a8c95d7660c3dd392a9b845fea.png)
AR Session Origin является эдаким «центром» AR-сцены, потому его масштабирование или перемещение будет влиять на отображение всей сцены целиком. Поскольку камера дополненной реальности управляется сеансом (AR Session), настройка AR Session Origin позволяет камере дополненной реальности и обнаруженным отслеживаемым объектам перемещаться вместе.
Далее создадим сам объект сеанса дополнненой реальности — объект с компонентом ARSession. Для этого выберем соответствующий пункт в меню управления иерархией.
![](https://habrastorage.org/getpro/habr/upload_files/49b/ac0/98e/49bac098e153a6aecd363b1d6a1db574.png)
Компонент ARSession — это глобальная директива для сцены, что данная сцена должна работать в дополненной реальности. Отключение ARSession в рантайме приведет к тому, что устройство перестанет просчитывать функции дополненной реальности, будь то трекинг поверхностей или расчет якорных точек. ARSession обязан находится на сцене дополненной реальности и быть единичным.
Формально, на этом этапе можно считать сцену подготовленной для работы с дополненной реальностью, но давайте добавим несколько компонентов с настройками, позволяющими видеть результаты AR-расчётов.
Добавим следующие компоненты на объект AR Session Origin:
-
AR Plane Manager, для того чтобы отслеживать горизонтальные и вертикальные поверхности в нашем приложении;
-
AR Raycast Manager — пригодится нам для того, чтобы размещать объекты на вышеупомянутых поверхностях;
-
AR Anchor Manager — для визуализации «якорей» виртуального пространства;
-
AR Point Cloud Manager и AR Point Cloud — для визуализации точек «реального» пространства на нашей сцене.
![](https://habrastorage.org/getpro/habr/upload_files/475/e04/8e6/475e048e649348117f3a048673e63369.png)
Для визуализации поверхностей и точек будем использовать встроенные объекты. Создадим объекты AR Default Point Cloud и AR Default Plane на сцене, сделаем из них префабы и проставим эти префабы в соответствующие компоненты на объекте AR Session Origin — префаб AR Default Point Cloud проставим в поле Point Cloud Prefab для компонента AR Point Cloud Manager, а AR Default Plane в поле Plane Prefab для компонента AR Plane Manager.
![](https://habrastorage.org/getpro/habr/upload_files/7d0/7ae/dee/7d07aedee4c192c91076ce1a9c7c1afd.png)
Если мы запустим приложение на данном этапе, то мы увидим, что все поверхности у нас отображаются в виде полупрозрачных плоскостей, а также на углах и в некоторых ключевых позициях мы будем видеть желтые точки — это элементы облака точек (feature points) помогающих нам отслеживать и сопоставлять реальные и виртуальные пространства.
Скрипт для примера работы с AR
Давайте напишем простенький скрипт, размещающий при тапе по экрану в указанных координатах объект. Объект будет располагать в AR-сцене, так что его местоположение хоть и не будет меняться на самой сцене, зато следующая «за устройством» камера позволит нам осмотреть его со всех сторон в дополненной реальности.
Подготовим объект — я взял обычный цилиндр и уменьшил его скейл по Y до 0.05. Сохраняем его как префаб и удаляем со сцены.
Длаее, пишем скрипт:
using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; [RequireComponent(typeof(ARRaycastManager))] public class PlaceOnPlane : MonoBehaviour { public GameObject PlacedObject; private GameObject _spawnedPlacedObject; private ARRaycastManager _raycastManager; private List<ARRaycastHit> _raycastHits = new List<ARRaycastHit>(); private void Awake() { _raycastManager = GetComponent<ARRaycastManager>(); } private static bool TryGetTouchPosition(out Vector2 touchPosition) { if (Input.touchCount == 0) { touchPosition = default; return false; } touchPosition = Input.GetTouch(0).position; return true; } private void Update() { if (!TryGetTouchPosition(out var touchPosition)) { return; } if (!_raycastManager.Raycast(touchPosition, _raycastHits, TrackableType.PlaneWithinPolygon)) { return; } var hitPose = _raycastHits[0].pose; if (!_spawnedPlacedObject) { _spawnedPlacedObject = Instantiate(PlacedObject, hitPose.position, hitPose.rotation); } _spawnedPlacedObject.transform.position = hitPose.position; } } 
Разберем, что здесь написано. На самом деле, всё просто. ARRaycastManager отвечает за проекцию лучшей в «реальном» пространстве — его функционал мы будем использовать в методе Update если был произведен тап по экрану. Отлавливаем тап, сохраняем координаты, переводим их в список пересечений луча с плоскостями, берем первую попавшуюся и просто ставим объект в указанный HitPoint. Вуаля — скрипт готов.
Теперь можем пробовать сбилдить наше приложение и запустить его. Походим немного по комнате, чтобы затрекать как можно больше пространства, и начинаем водить пальце по экрану по плоскостям — наш цилиндр должен будет перемещаться вслед за пальцем.
В заключение хочу пригласить всех заинтересованных на бесплатный урок курса VR/AR-разработчик, на котором вы узнаете, как AR технологии проникли во все сферы вашей жизни, и попробуете сами создать AR мини-игру.
ссылка на оригинал статьи https://habr.com/ru/articles/688306/
Добавить комментарий