Статьи

Создайте игру дополненной реальности Pokémon GO Style с Vuforia

Что вы будете создавать

В первом посте из этой серии мы говорили о том, насколько хороша Vuforia для создания опыта дополненной реальности , и теперь мы готовы применить эти концепции в реальном приложении. В этом уроке мы начнем играть с дополненной реальностью, используя Vuforia в Unity 3D . Мы узнаем, как настроить Vuforia и начать разработку AR-игры с нуля, применяя логику, аналогичную той, которая используется в Pokémon GO!

Нет необходимости иметь какой-либо предыдущий опыт работы с Unity или Vuforia, чтобы следовать этому руководству.

Если вы хотите копнуть глубже, почему бы не узнать об одном из самых фундаментальных понятий AR, маркеров, в нашем кратком курсе:

  • Мобильное приложение
    Покемон GO Style Дополненная реальность: маркеры
    Дерек Дженсен

Vuforia использует данные камеры устройства в сочетании с данными акселерометра и гироскопа, чтобы исследовать мир. Vuforia использует компьютерное зрение, чтобы понять, что он «видит» на камере, чтобы создать модель окружающей среды. После обработки данных система может приблизительно найти себя в мире, зная его координаты: где вверх, вниз, влево, вправо и так далее.

Если вы не знаете, что такое Vuforia, посмотрите на первый пост в этой серии.

  • Мобильная разработка
    Покемон GO Стиль дополненной реальности с Vuforia
    Жестяная мегали

Этот урок разделен на две части. В этом разделе мы рассмотрим некоторые особенности Vuforia для Unity 3D, узнаем, как настроить среду, а также начнем разработку небольшой AR-игры под названием Shoot the Cubes. Мы уделим особое внимание сборщику ARCamera , одной из самых важных частей Vuforia в Unity.

Во второй части мы продолжим разработку игры Shoot the Cubes, добавив интерактивности и сделав ее более интересной. В этом разделе не будет подробно рассказываться об особенностях Vuforia, так как идея будет заключаться в том, чтобы изучить некоторые возможности, предлагаемые Unity, для создания захватывающего опыта дополненной реальности.

Unity — это популярный и мощный игровой движок, который прост в использовании и может компилировать игры для нескольких платформ. Есть несколько преимуществ в использовании Unity для создания впечатлений от AR с помощью Vuforia. Можно настроить таргетинг на все поддерживаемые системы Vuforia, включая умные очки. Его проще использовать благодаря префабам, предоставленным Vuforia SDK. Используя только Unity, можно получить доступ ко всем функциям Vuforia.

Вы можете получить доступ ко всем функциям Vuforia в Unity, используя префабы Vuforia. Все, что вам нужно сделать, это перетащить объект на сцену и настроить его. Как следует из названия, префабы похожи на шаблоны для создания и клонирования объектов Unity с компонентами и свойствами. Например, ImageTarget представляет изображения, которые можно использовать в качестве целей. Давайте посмотрим на префабы Vuforia, доступные на Unity:

  • ARCamera : самый важный сборный дом. Он управляет общим восприятием AR, управляя качеством рендеринга, определяя центр мира, используемую камеру устройства, максимальные цели, которые нужно отслеживать, и так далее. В этом уроке мы сосредоточим наши усилия на понимании того, как использовать этот объект.
  • Цели : у всех целей Vuforia есть свой префаб : ImageTarget , MultiTarget , CylinderTarget , ObjectTarget , UserDefinedTargetBuilder, VuMark, FrameMarker . Эти цели будут распознаваться ARCamera и запускать действие, например, показ 3D-объекта или анимации.
  • CloudRecognition : используется для доступа к целям, определенным в облачной системе Vuforia.
  • SmartTerrain и Prop : эти объекты используются в функции Smart Terrain .
  • TextRecognition и Word : сборные, используемые в функции распознавания текста .
  • VirtualButton : Vuforia может понимать цели как кнопки, которые могут физически нажиматься пользователем. Этот сборный поможет вам использовать этот ресурс.

Игра, которую мы разработаем, проста, но она хорошо иллюстрирует принципы дополненной реальности и научит нас некоторым основам Vuforia. Цель игры — найти и стрелять в кубики, которые летают по комнате. Игрок будет искать кубики, используя свое устройство, и «постукивать», чтобы стрелять по коробкам. Мы не будем интересоваться счетом, уровнем или чем-то подобным, но вы можете легко расширить эти аспекты игры самостоятельно.

Прежде чем начать играть, нам нужно подготовить Unity для Vuforia. Процесс довольно прост, и нам нужно импортировать пакет SDK Vuforia и добавить префаб ARCamera в наш проект.

  • Создайте аккаунт разработчика на Vuforia.
  • Войдите в систему и загрузите Vuforia SDK для Unity.
  • Откройте Unity и создайте новый проект под названием «Стреляй в кубики».
  • После того, как откроется окно проекта Unity, перейдите к Активам> Импортировать пакет> Пользовательский пакет и выберите загруженный SDK.
  • Импортируйте все.
  • Удалите объект « Камера» в окне « Иерархия» .
  • Перейдите в диспетчер лицензий на портале разработчиков Vuforia и создайте новую лицензию, используя свою учетную запись разработчика.
  • Скопируйте лицензионный ключ.
  • Вернитесь в Unity, в окне « Проект» выберите «Активы»> «Vuforia»> « Префабы» > ARCamera   Выберите элемент и перетащите его в окно Иерархия .
ARCamera Prefab
  • Выбрав ARCamera , на панели « Инспектор» перейдите к Vuforia Behavior (Script) , найдите поле лицензионного ключа приложения и вставьте лицензию, созданную вами на портале разработчиков Vuforia.
Вставьте лицензионный ключ в сборник ARCamera
  • Нажмите кнопку « Применить» в верхней части панели « Инспектор», чтобы добавить лицензионный ключ ко всем префабам ARCamera в этом проекте.
Примените изменения в сборном ARCamera

Пришло время проверить, правильно ли работает среда.

Если у вас есть веб-камера на вашем компьютере, вы можете нажать кнопку воспроизведения Unity, чтобы проверить, работает ли ARCamera . С помощью веб-камеры можно будет распознавать цели; однако, не будет возможности использовать какие-либо данные датчика для проверки вашего опыта AR. Если канал камеры не отображает окно « Игры» , возможно, ваша камера несовместима с профилем веб-камеры, предоставленным ARCamera .

Нажмите кнопку PLAY на Unity

Лучший способ проверить приложение Vuforia — прямо на устройстве. Мы скомпилируем проект для Android, но те же шаги применимы к iOS-устройствам.

  • Во-первых, нам нужно сохранить сцену, над которой мы работаем. Перейдите в Файл> Сохранить сцену .
  • Выберите папку Assets и создайте новую папку с именем Scenes .
  • Сохраните эту сцену как ShootTheCubesMain .
  • Перейдите в Файл> Настройки сборки .
  • Выберите Android и нажмите на Switch Platform . Если эта опция отключена, вам придется загрузить нужный Unity SDK для устройства.
Настройки сборки Unity
  • Нажмите « Настройки проигрывателя» и настройте проект в окне « Инспектор» .
Настройки Unity Player
  • Обратите внимание на некоторые параметры. Отключите Auto Graphics API и убедитесь, что для параметра Graphics API выбран OpenGLES2 .
  • Введите идентификатор пакета .
  • Для устройств Android убедитесь, что выбранный минимальный уровень API равен API 9 или выше. Вам также нужно будет использовать ARMv7 для опции Device Filter .
  • Если вы правильно выполнили все шаги, проект готов к сборке. Однако, если вы впервые компилируете проект Unity для Android или iOS, вам необходимо настроить Unity для этих устройств. Следуйте этому руководству для Android и это для iOS .
  • Чтобы запустить проект, вернитесь в настройки сборки и нажмите « Построить и запустить» .

После сборки приложение будет установлено на ваше устройство. На данный момент все, что вы должны ожидать, это видеть канал камеры на вашем устройстве без каких-либо ошибок. Если у вас это есть, все работает правильно.

Цель игры Shoot the Cubes — отыскивать и стрелять летающими кубами, используя камеру и сенсоры устройства. Этот подход похож на тот, который используется в Pokémon GO. Для этого нам нужно только использовать префаб Vuforia ARCamera .

Есть много скриптов, прикрепленных к ARCamera . Пока единственное, что вам нужно понять, это сценарий Vuforia Behavior . Давайте посмотрим на его варианты:

  • Лицензионный ключ приложения : где необходимо вставить лицензионный ключ Vuforia.
  • Режим устройства камеры : контролирует качество рендеринга объектов.
  • Максимальное количество одновременных отслеживаемых изображений : определяет максимальное количество отслеживаемых целей одновременно. Vuforia не рекомендует больше пяти одновременно.
  • Максимальное количество одновременно отслеживаемых объектов : определяет максимальное количество объектов, отслеживаемых одновременно. Опять же, Vuforia не рекомендует больше пяти одновременно.
  • Загружать цели объекта при обнаружении : загружает объект, связанный с целью, как только цель обнаружена.
  • Направление камеры : выберите, какое устройство использовать.
  • Зеркальный фон видео : определяет, будет ли зеркально отображаться канал камеры.
  • Режим Word Center : наиболее актуальная опция для нашего проекта. Он определяет, как система должна определять местонахождение центра мира.
    • SPECIFIC_TARGET : использует конкретную цель как ссылку на мир.
    • FIRST_TARGET : первая обнаруженная цель будет использоваться как ссылка на мир.
    • КАМЕРА : использует камеру в качестве ориентира для всего мира.
    • DEVICE_TRACKING : использует датчик устройства в качестве эталона для установки мировых позиций. Это вариант, который нам нужно выбрать для нашего маленького проекта.

На данный момент все, что вам нужно изменить в ARCamera, — это режим Word Center . Нажмите на элемент ARCamera в иерархии и на панели « Инспектор» измените режим мирового центра на DEVICE_TRACKING .

Давайте добавим куб на сцену и проверим, правильно ли работает ARCamera.

  • Убедитесь, что положение и поворот ARCamera установлены на 0 по осям X, Y и Z.
Параметры преобразования ARCamera
  • Создайте объект Cube из Game Object> 3D Object> Cube .
Создать объект куба
  • Переместите Положение куба на оси Z к 10 и 0 на X и Y.
  • Масштабируйте объект до 2 по осям X , Y и Z.
  • Поверните куб на 45 градусов по осям X и Y.
Изменить Положение Куба Вращение и Масштаб
  • Вы можете нажать кнопку воспроизведения, чтобы проверить, правильно ли расположен куб.
  • Убедившись, что куб правильно расположен, соберите проект еще раз и протестируйте его на устройстве. Для сборки перейдите в File> Build and Run .

Вам придется осмотреться, повернув свое устройство, чтобы найти куб. Вы заметите, что объект остается на том же месте, даже после того, как вы повернули устройство от него. Как будто куб «существует» в реальном мире, но его можно увидеть только с камеры устройства.

Куб остается на месте даже после вращения устройства

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

Чтобы убедиться, что объекты AR начинаются с точки зрения пользователя, самый простой подход состоит в том, чтобы подождать, пока Vuforia определит центр мира, и найти вращение ARCamera, а затем настроить начальное расположение элементов в соответствии с этим. ориентации.

Мы создадим Spawn Manager, чтобы определить положение кубов, которые будут порождены. Менеджер определит свою позицию в соответствии с ротацией ARCamera . Он будет ждать, пока не будет установлено вращение, а затем переместится на 10 единиц вперед к камере.

  • Создайте два пустых объекта с помощью Game Object> Create Empty. Щелкните правой кнопкой мыши по одному из объектов, который вы только что создали, и переименуйте его в _SpawnController .
  • Измените имя другого пустого объекта на _GameManager .
  • В окне Project выберите папку Assets и создайте новую папку с именем Scripts .
  • В папке Scripts создайте сценарий C # с именем SpawnScript .
  • Перетащите SpawnScript в _SpawnController .
  • Дважды щелкните SpawnScript, чтобы отредактировать его.

Сначала давайте добавим пакет Vuforia.

01
02
03
04
05
06
07
08
09
10
using UnityEngine;
using System.Collections;
 
// We’ll need to use Vuforia package to
// make sure that everything is working
using Vuforia;
 
public class SpawnScript : MonoBehaviour {
     
}

Чтобы получить доступ к ARCamera , используйте Camera.main . Давайте создадим функцию для определения положения камеры и установки куба на 10 единиц вперед от этой точки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class SpawnScript : MonoBehaviour {
     
    // Define the position if the object
    // according to ARCamera position
    private bool SetPosition()
    {
        // get the camera position
        Transform cam = Camera.main.transform;
 
        // set the position 10 units forward from the camera position
        transform.position = cam.forward * 10;
        return true;
    }
}

Мы изменим положение только один раз из функции « Start . ChangePosition — это сопрограмма, которая немного подождет, прежде чем установить позицию.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
private bool mPositionSet;
    
   void Start () {
       // Defining the Spawning Position
       StartCoroutine( ChangePosition() );
   }
    
   // We’ll use a Coroutine to give a little
   // delay before setting the position
   private IEnumerator ChangePosition() {
 
       yield return new WaitForSeconds(0.2f);
       // Define the Spawn position only once
       if ( !mPositionSet ){
           // change the position only if Vuforia is active
           if ( VuforiaBehaviour.Instance.enabled )
               SetPosition();
       }
   }

Давайте проверим скрипт:

  • Вернувшись в Unity, нажмите на объект _SpawnController и используйте Game Object> 3D Object> Sphere, чтобы вставить сферу внутри _SpawnController .
  • Выберите сферу и убедитесь, что ее положение установлено на 0 по осям X, Y и Z.
  • Теперь мы будем перекрывать куб и _SpawnController, чтобы вы могли заметить важность скрипта. Выберите _SpawnController и установите его положение в 0 на оси X и Y и в 10 на оси Z, то же самое, что и куб.

Элементы начинают перекрываться; однако, как только вы соберете и запустите приложение на устройстве, вы увидите, что _SpawnController и его сфера появятся перед камерой, а куб окажется в другом месте. Идите и проверьте это! Убедитесь, что вы смотрите на устройство прямо при запуске приложения.

Поздравляем, вы создали свой первый опыт дополненной реальности. Да, это немного грубо, но это работает! Из этого урока вы узнали, как использовать главный сборный Vuforia в Unity, ARCamera . Вы также узнали, как настроить его и как использовать датчики устройства, чтобы создать иллюзию того, что виртуальный объект вставлен в мир.

В следующем уроке мы усовершенствуем этот принцип, чтобы создать настоящую игру и более увлекательный опыт. Мы продолжим разработку игры Shoot the Cubes, добавив немного интерактивности и изучив возможности Unity для создания интересной AR-игры. Мы заставим кубы появляться и летать, и мы позволим игроку искать и уничтожать их, стреляя из устройства лазером.

До скорого!

Отдельное спасибо за векторное изображение, разработанное Freepik и лицензированное Creative Commons CC BY-SA.