Статьи

Создание приложения Google Cardboard VR в Unity

Unity в настоящее время является одним из самых популярных решений для создания приложений виртуальной реальности. Google Cardboard является отличным выбором для начала работы в полевых условиях — тратить 20 долларов на виртуальную гарнитуру, а не на сотни — гораздо безопаснее для начала работы (и есть множество людей со смартфонами, которые потенциально могут насладиться вашим приложением с такой же меньшая первоначальная стоимость!).

Ранее я уже рассказывал о том, как создать виртуальную реальность для Интернета сегодня с помощью JS , а также о демонстрациях визуализации потока Twitter в VR и JS и многих других. Для тех, кто предпочитает разработку Unity, пришло время выровнять эти цифры и написать еще немного о разработке VR в Unity. По какой-то довольно странной причине я не смог найти много подробных или разнообразных руководств по работе с Google Cardboard Unity SDK с нуля, поэтому я сделал то, что сделал бы любой автор SitePoint. Я положил один вместе!

Обновление от 21 марта. С момента написания этой статьи Google обновил свой SDK и изменил функционал перекрестия. У нас есть новая статья, освещающая эти изменения здесь . Большая часть этого урока все еще точна, только функциональность перекрестия изменилась. Так что следуйте этому руководству, а затем прочитайте новую статью, чтобы ваш перекрестие заработало!

Что вам нужно

Для этого вам понадобятся следующие программные и аппаратные средства:

  • Unity — рекомендуется как минимум v4.5. Я использую Unity v5 Pro для этого руководства. Unity v5 Personal, видимо, тоже работает хорошо.
  • Windows или Mac — я буду использовать Windows в этом уроке для изменений (в основном потому, что большинство разработчиков Unity, похоже, работают на Windows, поэтому будет честно следовать примеру статьи!)
  • Картонный SDK для Unity — эта ссылка предоставит вам репозиторий GitHub. Я объясню это и настройку Java и Android в этой статье.
  • Java SE SDK — это потребуется для установки Android SDK.
  • Android SDK — если вы загружаете его впервые, вам нужны только биты SDK Tools Only SDK. Я объясню это в ближайшее время.
  • Гарнитура в стиле Google Картон
  • Устройство Android, которое можно вставить в эту гарнитуру — его можно экспортировать для работы с iOS, но я не буду описывать этот процесс, поскольку у меня нет iPhone!
  • Относительно базовые знания Unity — я расскажу о многих основах для новичков, но небольшое знание поможет!

Код

Хотите прыгнуть прямо в код? Мой пример проекта на GitHub для вас, чтобы вы могли делать все, что захотите!

Подготовка Android SDK

Чтобы создать мобильное приложение для Android, нам потребуется Android SDK, работающий в нашей системе. Для опытных разработчиков Android, у которых это уже работает, не стесняйтесь переходить к следующему разделу!

Чтобы начать процесс Android SDK, сначала необходимо проверить, установлен ли в вашей системе Java SE SDK. Если вы не уверены, попробуйте сначала перейти к шагу установки Android SDK. Установка будет жаловаться, если у вас нет Java!

Какая Java?

Если ваша система свободна от Java, вам может быть немного непонятно, какой из различных вариантов Java вам понадобится. Перейдите на страницу загрузки Java SE и выберите вариант загрузки JDK:

Скачать Java

После того, как вы загрузили это, запустите очень типичный процесс установки, который выглядит примерно так:

Экран установки Java

Android SDK Загрузка и установка

Если вы новичок в разработке для Android, вам нужно скачать Android SDK и установить его. Вам нужен только бит «SDK Tools Only» SDK, который доступен на странице « Другие параметры загрузки» . Это обеспечивает минимум. Вы можете скачать весь пакет Android Studio, если хотите в будущем много заниматься разработкой приложений для Android. Если вы придерживаетесь опции «SDK Tools Only», перейдите на эту страницу и выберите версию для вашей операционной системы:

Загрузка Android SDK

Запустите тот установочный файл, который вы скачали. Если вы не уверены, что у вас установлена ​​Java, установка должна подтвердить это для вас:

Java существует!

Следуйте остальным инструкциям (это довольно стандартные запросы установки) и установите SDK в вашу систему. Когда это будет сделано, установите флажок перед тем, как нажать кнопку «Готово», чтобы вы могли загрузить SDK Manager:

Android SDK Успех

Менеджер SDK должен появиться и выглядеть так:

SDK Manager

Вероятно, для вас уже выбрано несколько флажков. Давайте уменьшим это до того, что нам нужно сейчас. Под папкой «Инструменты» вы должны выбрать следующее:

  • Android SDK Tools — это должно быть в верхней части списка.
  • Инструменты Android SDK Platform — это будет сразу после SDK Tools.
  • Инструменты сборки Android SDK — вам нужна только последняя версия (вы можете увидеть версии под колонкой «Rev.»)

Это должно выглядеть так:

Параметры установки SDK Manager

Затем в самой последней папке Android API (в зависимости от того, какая из них выше, на момент написания «Android 6.0 (API 23)») выберите следующее:

  • Платформа SDK — Вам это понадобится!
  • Образ системы — вы можете выбрать образ системы ARM или Intel, чтобы эмулировать эту систему Android на вашем компьютере. Если вы хотите провести все тесты на своем физическом устройстве Android, вы можете пропустить это.
  • Google API — это позволит нам использовать любые API Google с нашим приложением. Это не относится к Google Cardboard — я просто включил его для удобства, вы, вероятно, тоже можете его пропустить.

Это должно выглядеть следующим образом:

Системные образы SDK Manager

Нажмите «Установить пакеты X» в правом нижнем углу, чтобы начать процесс установки. Вам нужно будет принять лицензию, прежде чем она позволит вам установить.

Как только это будет установлено, у вас должно быть все, что вам нужно на стороне Android вещей!

Создание проекта «Единство картона»

Из репозитория Cardboard SDK Github, указанного выше, все, что вам действительно нужно скачать, — это файл Cardboard SDK For Unity .unitypackage здесь .

Как только это загрузится, мы готовы начать наш настоящий проект Unity. Откройте Unity и сделайте очевидный первый шаг — создайте новый проект.

Создать новый проект Unity

Выберите 3D и дайте имя вашему проекту. Не беспокойтесь о добавлении пакетов ресурсов на этом экране, мы добавим наш собственный на следующем шаге. Выберите «Создать проект», как только вы будете готовы начать:

Называя проект Unity и устанавливая его в 3D

Затем перейдите в раздел « Активы»> «Импортировать пакет»> «Пользовательский пакет» и найдите файл .unitypackage Cardboard SDK, который вы загрузили ранее.

Добавить пользовательский пакет

Если вы используете Unity 5, вам не понадобятся устаревшие папки, и вы можете снять эти флажки:

Отмените наследие для Unity 5

Когда это удастся, ваши новые активы Cardboard SDK должны появиться в вашем проекте в папке «Cardboard»:

Добавлены картонные активы

В папке Cardboard SDK вы найдете четыре подпапки — «Редактор», «Префабы», «Ресурсы» и «Сценарии»:

В картонной папке

В папке «Prefabs» вы найдете Prefab с именем «CardboardMain.prefab». Перетащите это в вашу сцену и поднимите ее на 2 по оси Y (иначе пользователь почувствует, что они крошечные или очень короткие!):

Папка CardboardMain Prefab

Откройте префаб «CardboardMain» и в нем вы найдете «Основную камеру». Это две наши стереоскопические камеры, работающие в унисон, чтобы показать сцену в удивительном виртуальном пространстве, глядя на нее через гарнитуру Google Cardboard. В нашем объекте «Основная камера» мы хотим добавить компонент «Physics Raycaster». Для этого нажмите «Добавить компонент», когда откроется «Основная камера». Я обычно нахожу это, набирая «raycaster» в открывшемся окне. Нам понадобится физика Raycaster, чтобы иметь возможность взаимодействовать с элементами, глядя на них.

Добавление Raycaster

Затем вы можете добавить значок, чтобы показать, когда пользователь смотрит на объект. Я использовал бесплатную иконку в магазине Unity из пакета 64 Flat Game Icons от Office57 . Вы можете создать свой собственный спрайт для этого тоже, если вы предпочитаете. Получите спрайт откуда-то и импортируйте его в свой проект.

Создайте пустой игровой объект в объекте «Голова» в «CardboardMain». Я переименовал мой в «Target». Затем перетащите ваш спрайт внутрь этого объекта:

Перетаскивание спрайта в пустой игровой объект

Это должно быть все, что вам нужно, чтобы включить множество очень полезных карт отслеживания и контроля.

Отвечая на события картона

Теперь у нас есть созданное представление CardboardMain, нам нужно несколько вещей в сцене для взаимодействия. Для демонстрации я использовал Magic Lamp от 3dFoin и SkySphere Volume 1 от Hedgehog Team из магазина Unity. Вы можете использовать любые объекты, которые вы хотите, перетащив лампу в вашу сцену:

Перетаскивание в лампе на сцену

При импорте SkySphere не стесняйтесь снимать флажок «Примеры», чтобы сохранить чистоту в нашем проекте:

Импорт Skysphere

Поместите лампу в положение {x: 0, y: 1.5, z: 2} с вращением {x: -90, y: 90, z: 0} и масштабируйте его на 0,5 по всем осям, чтобы он не был слишком большим в сравнение с нашей сценой:

Настройки волшебной лампы

Затем перетащите «Skyball_WithoutCap» из папки SkySphere_V1> Meshes . Он должен быть помещен в {0,0,0} с вращением X -90:

Скайбол без шапки

Чтобы взаимодействовать с Cardboard SDK для этого объекта, вам потребуется некоторый код для этого объекта. Наша первоначальная функциональность будет сосредоточена на том, чтобы происходить события, когда мы смотрим на лампу, а затем отворачиваемся. Каждый раз, когда пользователь отводит взгляд от лампы, небо меняет текстуру:

using UnityEngine; using UnityEngine.EventSystems; using System.Collections; public class Lamp : MonoBehaviour { public Renderer skybox; public Material sky1; public Material sky2; public Material sky3; public Material sky4; private int currentSky = 0; void Start () { } public void stareAtLamp() { switch (currentSky) { case 0: skybox.material = sky2; currentSky++; break; case 1: skybox.material = sky3; currentSky++; break; case 2: skybox.material = sky4; currentSky++; break; case 3: skybox.material = sky1; currentSky = 0; break; } } } 

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

Чтобы добавить этот код в наш проект, выберите свою лампу и нажмите «Добавить компонент». Введите «скрипт», и вы должны найти «Новый скрипт …». Нажмите на это и назовите это «Лампа». Вставьте наш код сверху.

Открыть в редакторе кода

Когда ваш код будет сохранен, эти общедоступные переменные будут доступны в качестве параметров вашего скрипта. Перетащите ваш объект Skybox из иерархии вашего проекта в переменную Skybox. Найдите материалы для вашей SkySphere в папке « Активы»> «SkySphere_V1»> «SkySphere> Материалы> With_Planet » (или любые другие материалы, которые вы предпочитаете) и перетащите несколько из них в четыре материала неба.

Перетащите объекты в скрипт

Нам понадобится еще один компонент в нашем объекте лампы — «Event Trigger». Это то, что на самом деле вызовет stareAtLamp() мы кодировали ранее. Перейдите к «Add Component» с выбранным объектом лампы и найдите компонент «Event Trigger». Затем, когда он окажется в объекте вашей лампы, нажмите «Добавить новый тип события» и выберите «PointerExit»:

Добавление события выхода из указателя

Теперь у вас будет область для добавления в ответах на это событие «PointerExit». Нажмите значок «+» в левом нижнем углу, а затем перетащите объект лампы в поле, которое отображается под «Только во время выполнения»:

Настройка триггера событий

Это позволяет нам получить доступ к функциям лампы в качестве возможных ответов. Нажмите на раскрывающееся stareAtLamp() «Нет функции», найдите «Лампа» и выберите stareAtLamp() .

Настройка взгляда на функцию лампы

Чтобы сработал триггер события, наша сцена нуждается в «Системе событий». Вернитесь к своей сцене и создайте ее из UI> Event System .

Добавление системы событий

Вы можете удалить «Автономный модуль ввода» из системы событий, если хотите. Основным важным компонентом, который нам нужен, является «Модуль ввода взгляда» из Cardboard SDK. Вы можете добавить этот, нажав «Добавить компонент» и перейдя в Сценарии> GazeInputModule :

Добавление модуля ввода взгляда

Теперь мы определяем наш целевой спрайт как тот, который появляется, когда мы используем GazeInputModule и смотрим на объект. Перетащите объект «Target» (или любой другой объект, который вы выбрали для вызова в пределах объекта CardboardMain) в настройку курсора для компонента:

Перетащите цель в поле зрения

Чтобы поднять, когда мы смотрим на эту лампу, нам нужно добавить к ней коллайдер. Для этого нажмите «Добавить компонент» и введите «collider», чтобы найти «Sphere Collider». Добавьте это в:

Добавление Sphere Collider

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

Крышка лампы

Мы почти готовы протестировать наше приложение VR!

Удалите объект «MainCamera» в вашей сцене, если вы еще не инстинктивно удалили его — объект «CardboardMain» — наша новая камера.

Прежде чем мы протестируем, добавьте к сцене простой пол. Создайте объект «Плоскость» из 3D Object> Plane и убедитесь, что он расположен в {x: 0, y: 0, z: 0}. Масштабируйте эту плоскость до {x: 2, y: 1, z: 2}, чтобы она распространялась на весь скайбокс:

Созданный Самолет

Тестирование нашего приложения

У нас должно быть все на месте, чтобы иметь возможность опробовать наше приложение VR и посмотреть, насколько хорошо оно играет. Для этого нажмите кнопку «Воспроизвести» в верхней части Unity, и приложение запустится для вас. Следует запомнить два важных элемента управления:

  • Для имитации просмотра вашей сцены, удерживая нажатой клавишу Alt , перемещайте мышь.
  • Чтобы имитировать наклон головы, удерживайте нажатой клавишу « Shift» при перемещении мыши.

Вы должны увидеть, как ваша сцена работает хорошо, показывая вашу лампу. Чтобы увидеть его немного больше, в правом верхнем углу есть маленькая иконка. Нажмите на это и выберите «Развернуть». Вы также можете нажать «Развернуть при игре», чтобы запросить это автоматически при тестировании:

Максимизация экрана

Теперь ваша сцена должна быть максимально развернута:

Играя сцена

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

Target On Lamp

Если вы отведите взгляд, небо должно измениться, как волшебство!

Глядя

Отлично, это наше первое использование Cardboard SDK. Тем не менее, есть еще одна функция, которой мы не воспользовались на гарнитуре Cardboard — наш кликер сбоку. Вот как это сделать.

Использование кликера

Чтобы добавить события щелчка с гарнитуры Cardboard, нам нужно добавить новый обработчик событий. Сначала мы настроим, что именно должно делать это событие. Для меня лампа просто не достаточно волшебна. Я собираюсь включить систему частиц, которая отключается каждый раз, когда зритель нажимает на лампу. Для этого снова откройте лампу и нажмите «Добавить компонент», затем введите «частица». Вы должны найти «Система частиц». Добавьте это на свою лампу. Теперь вы должны увидеть белые частицы, плавающие из него:

Необычные частицы

Вы можете поиграть с настройками Particle System в соответствии со своими предпочтениями и посмотреть, что, по вашему мнению, выглядит лучше всего! Я установил цвет более желтым, изменил продолжительность на 10 и установил их в произвольном направлении через раздел «Форма». Одна настройка, которую вам нужно изменить, чтобы частицы появлялись только при щелчке, это изменить «Rate» в «Emission» на 0:

Настройки системы частиц

Я также использовал «модификатор гравитации», равный 1, благодаря которому частицы выглядели немного прохладнее, когда падали на лампу. Попробуйте!

В коде мы добавим новую функцию rubLamp() которая испускает rubLamp() частиц из нашей системы частиц:

 public void rubLamp() { GetComponent<ParticleSystem>().Emit(10); } 

Затем мы возвращаемся к компоненту Event Trigger нашего лампового объекта и добавляем один для «Pointer Click»:

Щелчок указателя

Затем мы нажимаем и добавляем нашу rubLamp() в качестве ответа:

Руб лампы

Теперь, если мы сыграем нашу сцену и нажмем на эту лампу, из нее вылетят частицы. Довольно аккуратно!

Разлетающиеся частицы

Загрузка приложения на устройство Android

Теперь мы определенно хотим получить его на свой телефон, чтобы мы могли попробовать его в гарнитуре Google Cardboard. В Unity выберите «Файл»> «Настройки сборки» . На появившемся экране выберите «Android» из списка, а затем выберите «Настройки игрока»:

Настройки сборки

Настройки появятся справа (вам может понадобиться немного сдвинуть окно «Build Settings» влево, чтобы увидеть все это). В разделе « Разрешение и представление» измените «Ориентация по умолчанию» на «Пейзаж влево»:

Разрешение настроек сборки

Затем откройте раздел «Другие настройки» и обновите идентификатор пакета, включив в него название вашей компании и название приложения — com.companyName.appName . Я использовал com.SitePoint.GreatestVRProjectInTheWorld :

Название настроек сборки

Теперь вы должны быть готовы к работе! Подключите ваш телефон Android через USB к вашему компьютеру и нажмите «Build and Run» в окне «Build Settings»:

Построить и запустить

Выберите место для сохранения вашего файла apk и дайте ему имя:

Название APK

Единство должно пробежать и сделать все остальное для вас. Это поместит приложение на ваш телефон и запустит его. Как только приложение появится на вашем телефоне, отключите его от компьютера, вставьте в Google Cardboard и наслаждайтесь созданием виртуальной реальности!

Приложение VR работает на мобильном телефоне

Вывод

Работать с Google Cardboard и Unity удивительно просто! Из этой первоначальной демонстрации вы теперь получаете все возможности Unity в сочетании с возможностями всей портативной VR-платформы! Некоторое время назад я рассмотрел вызов веб-API в Unity — Cardboard SDK хорошо интегрируется в весь этот процесс, так что вы можете иметь приложение VR Unity с поддержкой IoT, если объедините эти два метода!

Не стесняйтесь использовать этот учебник кода в качестве основы для любого проекта Cardboard VR, который вы создадите в будущем! Если вы что-то делаете с этим, пожалуйста, поделитесь этим в комментариях или свяжитесь со мной в Twitter ( @thatpatrickguy ). Я хотел бы проверить это!

Если вы ищете другие ссылки и примеры проектов, которые помогут вам в разработке VR и Unity, у меня есть набор курируемых ссылок, которые могут подойти вам! Зайдите в Dev Diner и посмотрите мой VR с Руководством разработчика Unity , полным ссылок на ресурсы по всему Интернету. Если у вас есть другие замечательные ресурсы, которых у меня нет в списке, пожалуйста, дайте мне знать!