Привет, мой юный исследователь! Ты когда-нибудь хотел оживить свои идеи? Сделать так, чтобы прямо на твоем столе появился детализированный замок или по комнате забегал забавный зверек, видимый только тебе? Это не выдумка, а технология, и называется она «дополненная реальность» или AR.
Что такое дополненная реальность (AR)?
Представь, что ты смотришь на свою комнату через камеру телефона. Все как обычно: стол, стул, твои вещи. А теперь представь, что на экране, рядом с настоящим столом, вдруг появляется виртуальный котенок. Он сидит, умывается, смотрит на тебя. Ты можешь обойти его и посмотреть со всех сторон, как будто он и вправду здесь.
Вот это и есть дополненная реальность — мир, где реальные предметы живут бок о бок с виртуальными. Самый известный пример, который ты мог видеть — игра Pokémon GO, где персонажи прятались в парках и на улицах твоего города.
Ключевой инструмент: AR Foundation
Чтобы создавать такие эффекты, нам нужен специальный инструмент. Мы будем использовать Unity — это невероятно мощная и популярная программа, в которой создается огромное количество игр. Считай, что это наша рабочая среда.
А чтобы соединить реальный мир (который видит камера) и виртуальный мир (который мы создадим в Unity), нам понадобится специальный инструмент. Этот инструмент называется AR Foundation.
Что нам понадобится?
Прежде чем начать, давай убедимся, что у нас есть все необходимое:
-
Unity
-
Телефон с поддержкой 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/
Добавить комментарий