AR-технологии в Unity: Твой первый шаг в дополненную реальность с AR Foundation

от автора

Привет, мой юный исследователь! Ты когда-нибудь хотел оживить свои идеи? Сделать так, чтобы прямо на твоем столе появился детализированный замок или по комнате забегал забавный зверек, видимый только тебе? Это не выдумка, а технология, и называется она «дополненная реальность» или AR.

Что такое дополненная реальность (AR)?

Представь, что ты смотришь на свою комнату через камеру телефона. Все как обычно: стол, стул, твои вещи. А теперь представь, что на экране, рядом с настоящим столом, вдруг появляется виртуальный котенок. Он сидит, умывается, смотрит на тебя. Ты можешь обойти его и посмотреть со всех сторон, как будто он и вправду здесь.

Вот это и есть дополненная реальность — мир, где реальные предметы живут бок о бок с виртуальными. Самый известный пример, который ты мог видеть — игра Pokémon GO, где персонажи прятались в парках и на улицах твоего города.

Ключевой инструмент: AR Foundation

Чтобы создавать такие эффекты, нам нужен специальный инструмент. Мы будем использовать Unity — это невероятно мощная и популярная программа, в которой создается огромное количество игр. Считай, что это наша рабочая среда.

А чтобы соединить реальный мир (который видит камера) и виртуальный мир (который мы создадим в Unity), нам понадобится специальный инструмент. Этот инструмент называется AR Foundation.

Что нам понадобится?

Прежде чем начать, давай убедимся, что у нас есть все необходимое:

  1. Unity

  2. Телефон с поддержкой AR: Почти все современные телефоны поддерживают дополненную реальность.

Пишем первую программу: «Появление куба!»

Хватит теории, перейдем к практике! Наша первая программа будет простой, но очень эффектной. Мы научим телефон находить поверхность и по нашему касанию экрана размещать на ней обычный кубик.

В Unity нужно будет сделать несколько подготовительных шагов: настроить проект для работы с AR Foundation, добавить на сцену специальные компоненты, которые будут управлять камерой и поиском поверхностей. Но основа нашей программы — это код.

Вот как он выглядит:

using System.Collections.Generic; // Позволяет нам использовать списки, в данном случае для хранения результатов "попадания" луча. using UnityEngine; // Основной модуль движка Unity, необходим для работы с игровыми объектами и компонентами. using UnityEngine.XR.ARFoundation; // Главный модуль AR Foundation, предоставляет доступ к функциям AR, таким как отслеживание плоскостей. using UnityEngine.XR.ARSubsystems; // Предоставляет доступ к базовым системам AR, с которыми работает AR Foundation.  // Это название нашего скрипта (программы). Мы даем ему имя, чтобы потом можно было его использовать. public class PlaceObjectOnPlane : MonoBehaviour {     // Здесь мы оставляем "слот" для объекта, который хотим разместить.     // В Unity мы просто перетащим в это поле 3D-модель нашего кубика.     public GameObject objectToPlace;      // Это наш инструмент для "прощупывания" пространства, который будет искать поверхности в реальном мире.     private ARRaycastManager raycastManager;          // В этом списке будут храниться все точки, в которые "попал" наш луч.     private List<ARRaycastHit> hits = new List<ARRaycastHit>();      // Эта часть кода выполняется один раз в самом начале.     void Start()     {         // Мы находим наш инструмент и подготавливаем его к использованию.         raycastManager = GetComponent<ARRaycastManager>();     }      // Эта часть кода работает постоянно, пока запущено наше приложение.     // Она всегда наготове и ждет твоих команд!     void Update()     {         // Проверяем, коснулся ли ты экрана пальцем.         if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)         {             // Если да, то мы выпускаем невидимый "луч" из точки касания в реальный мир.             // Этот луч ищет любую поверхность, которую телефон уже успел "заметить".             if (raycastManager.Raycast(Input.GetTouch(0).position, hits, TrackableType.PlaneWithinPolygon))             {                 // Отлично! Луч нашел поверхность!                 // Берем самую первую точку, в которую он попал.                 var hitPose = hits[0].pose;                                  // И теперь главный момент: создаем наш кубик в этом самом месте!                 Instantiate(objectToPlace, hitPose.position, hitPose.rotation);             }         }     } } 

Разбор кода

Давай разберем этот код по строчкам.

  • using ...; — в самом начале мы перечисляем, из каких библиотек мы будем брать готовые функции. Это как наборы инструментов, которые уже подготовили для нас другие программисты.

  • public class PlaceObjectOnPlane — это мы объявляем наш собственный класс (программу) и даем ему имя.

  • public GameObject objectToPlace; — мы создаем публичную переменную. Слово public означает, что мы увидим это поле прямо в редакторе Unity и сможем поместить туда наш 3D-кубик, просто перетащив его мышкой.

  • ARRaycastManager — это и есть тот самый инструмент из AR Foundation. Его работа — пускать лучи и сообщать нам, куда они попали.

  • void Update() — это сердце нашего приложения. Все, что написано внутри этой функции, повторяется снова и снова, много раз в секунду. Это позволяет нашей программе мгновенно реагировать на твои действия.

  • Input.touchCount > 0 — здесь мы проверяем, есть ли на экране хотя бы одно касание.

  • raycastManager.Raycast(...) — это команда «пустить луч!». Мы пускаем его из той точки экрана, которой ты коснулся, и проверяем, пересекся ли он с какой-нибудь из найденных плоскостей (столом, полом).

  • Instantiate(...) — самое приятное. Эта команда означает «создать экземпляр». Мы берем наш объект (objectToPlace), который мы заранее положили в «слот», и создаем его точную копию в той точке, куда попал наш луч.

И вот результат! На экране твоего телефона, прямо на столе, появляется виртуальный куб.

Что же дальше, юный инженер?

Теперь, когда ты освоил основу, перед тобой открыты все дороги!

  • Ты можешь заменить простой кубик на что угодно: на модель цветка, футуристичного робота или даже дракона.

  • Ты можешь добавить анимацию, чтобы твой персонаж двигался.

  • Ты можешь добавить кнопки, чтобы управлять объектом: увеличивать его, вращать или менять цвет.

Мир дополненной реальности ждет твоих идей. Это технология, которая ограничена только твоей фантазией.

Надеюсь, это небольшое введение в мир AR-технологий тебе понравилось. Это только начало, и самое интересное впереди. Дерзай, создавай, и, возможно, именно ты разработаешь что-то, что изменит мир.


ссылка на оригинал статьи https://habr.com/ru/articles/920266/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *