Разработка VR приложений под Oculus Quest 2 на Unity | VR419.ru

Разработка VR приложений под Oculus Quest 2 на Unity

Как и ранее с Карбордом, мне захотелось слепить какую-нибудь демку для Квеста. Пока что вопросов больше, чем ответов, но, в этом посте я собрал полезные ссылки, которые помогут вам начать разрабатывать под Oculus Quest свою первую игру. Ну и поделюсь какими-то соображениями, которые у меня уже появились.

Читайте так же: Разработка игр на Unity3D под виртуальную реальность + мои две демки

A-frame: создаем VR-приложение прямо в браузере!

С чего начать

Прямо с вот этой статьи от Oculus, которую сходу фиг найдешь. Там по пунктам рассказывается, что и как делать, чтобы сделать своё первое приложение (да, в конце у вас будет APK для установки в Oculus Quest).

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

ВАЖНО: Про это нигде не написано явно, но, не забудьте перед старом установить Oculus софт, т.к. в конце сборки Unity постоянно его запускает. При этом, сам Квест для создания APK вам вообще не нужен. А вот для тестирования — уже да. Возможно, билдиться сборка будет и без окулус-софта, я не проверял, у меня он установлен.

Разрешить режим разработчика для шлема

Если вы читали мой гайд по запуску Oculus Quest 2, этот режим у вас уже будет активирован для работы с SideQuest. Если нет — то вот этот момент. Почитайте, там ничего сложного. Эта штука даст вам устанавливать на шлем файлы из неизвестных источников.

Установить Unity

Всё подробно расписывают тут же, там прямо скрины, что нам нужно установить, правда, почему-то там нет Microsoft Visual Studio, ее так же ставьте, если у вас нет подобного редактора (оно будет в вверху на этом скрине):

Необходимые компоненты Unity

Настроить окружение Unity

У них это три шага: создать проект, установить параметры сборки и включить поддержку VR. Я опишу свой алгоритм:

  1. Создаем проект в Юнити-Хабе, выбрав 3D;
  2. В свойствах сборки (File -> Build Settings) выбираем Android и задаем компрессию текстур в ASTC:

    Параметры сборки Unity для Oculus Quest

  3. Жмем Switch Platform (оно может думать несколько минут, пока будет переключаться, в зависимости от вашего ПК, это нормально) — эта кнопка будет у вас там, где у меня Build на верхнем скрине;
  4. В Edit > Project Settings выбираем XR Plugin Management и там выбираем галочку для Oculus (так врубаем поддержку VR);
  5. В Edit > Project Settings > Player прописываем разработчика и название приложения;

    Настройки автора и названия приложения

  6. В табе андроида (стрелка 3 на предыдущем скрине) в Other settings в разделе Identification пишем уникальное имя пакета андроид. Это важно, оно должно быть уникальным, к тому же, если вы далее будете вносить изменения в ваше приложение и снова устанавливать его в шлем, вам не придется удалять старую версию, за счет имени пакета она будет просто перезаписываться.
  7. Там же ставим Minimum API Level — 23 (6,0 Marshmallow) — это важно, т.к. первую ошибку при сборке я поймал именно потому, что не была указана эта штука.
  8. Там же ставим:  Install Location — Automatic

Всё это на следующем скрине:

Настройки пакета для Oculus Quest

Сделать первое приложение

А дальше идете по статье, с которой мы начали. Оно на инглише, но, переводчик в помощь, я пробовал, у меня получилось. Единственное, что при сборке была ошибка о том, что не указана версия андирода, я говорю об этом в прошлом пункте. На выходе у вас должно получиться что-то вот такое (APK будет далее в примерах):

Установить приложение на Oculus Quest

Если шлем у вас подрублен кабелем к ПК и настроен весь софт, то по идее кнопка в Unity Build and run вам всё и установит и запустит. Но, я так не пробовал, т.к. не хочу подрубать шлем к компу по кабелю. Ну и точно не хочу, чтобы он всё время висел на проводе, пока я что-то делаю в Unity, хотя в теории это и более удобно, если хочешь что-то сразу тестировать в самом шлеме.

Изначально я ставил свои APK через SideQuest (я уже про него упоминал, ему нет разницы, будешь ты ставить приложение из их магазина или свою поделку). Там же описан способ работы сайдквеста по беспроводу, почитайте вобщем, зря писал чтоли.

Но, в итоге я пришол к более удобному, как мне кажется, способу установки своего APK на Oculus Quest (и совсем без проводов!).

  1. Настраиваем FTP на шлеме, для беспроводной передачи APK.
  2. Ставим на Квест какой-то файлменеджер, например, этот.
  3. Далее, через FTP (в моём случае — это просто вкладка в ТоталКоммандере на ПК) закидываем на шлем наш APK-файл, и через установленный файлменеджер его открываем. В случае с указанным менеджером оно спросит, чем открыть APK, выбираем «Файлы» (да, внутри Квеста, оказывается, есть свой менеджер файлов, только он скрыт).
  4. Оно откроет приложение «Файлы», в нем снова ищем наш APK и открыаем снова, и вот теперь оно предложит его установить, предварительно предупредив, что файл может быть вредоносным.
  5. Устанавливаем файл, никуда не переходим! У нас сразу появится кнопка «Открыть», жмем ее и запускаем наше приложение. (Если что, оно потом будет в незивестных источниках, его оттуда можно удалить).
  6. Профит!

Теперь, когда у нас настроена связка: ПК -> шлем порядок работы прост. Изменили что-то в Unity, сделали сборку, залили по FTP на шлем, взяли в руки шлем, там у нас всё еще открыто окно «Файлы» с нашей папкой, куда мы закидывали APK, просто жмем на него и оно запишет новое приложение поверх старого (т.к. мы не меняли имя пакета).

Так очень быстро и просто можно проверять изменения, которые вы вносите в приолжение, и вам вообще не нужен кабель!

Есть еще способ через ODH, но про него далее, тем более, что у меня он не заработал.

Интеграция пакета Oculus в Unity

После того, как вы сделаете первое приложение, вы увидите, что:

  1. Камера жестко прибита к голове;
  2. Вы не можете перемещаться по этому миру;
  3. И вообще не ясно, что делать дальше.

А дальше вам понадобится вот эта штука Oculus Integration Package — пакет префабов и заготовок от Oculus для вашей дальнейшей разработки. Чтобы его установить, делаем следующее:

  1. В Unity жмем Ctrl + 9 (или идем в меню Window -> Asset store);
  2. В окно поиска вводим oculus integration, листаем, пока не найдем нужный нам пакет:
  3. Переходим внутрь, жмем Download, ждем, пока оно скачается. После этого Download сменится на Import, жмем эту кнопку.
  4. Далее, выбираем нужные нам компоненты вот в этом окне. Там много всего, для простейшей разработки нам понадобится только секция VR, но в первый раз можете импортировать всё, ваш проект на диске разопрет где-то до гигабайта, это его нормальное состояние:

    Выбирайте только нужное

  5. Теперь вам доступны ассеты Oculus для VR разработки, их можно найти вот здесь:

    Ассеты Oculus

Там есть и демо-сцены, и разные модельки, и готовые префабы, покопайтесь.

ВАЖНО: в какой-то момент при импорте Unity скажет, что вы качаете новый плагин для VR и не обновить ли старый — соглашаемся обновить.

Как заставить игрока ходить и смотреть по сторонам

Для этого нужно добавить в сцену префаб OVR Player Controller, который лежит вот тут:

Учим игрока ходить

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

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

Как сделать плавный поворот

В описанном выше префабе убрать эту галочку Snap rotation:

Делаем плавный поворот для игрока

Теперь крутиться в VR мире куда приятнее. Там же можете посмотреть и другие настройки.

Как оценить производительность игры на Oculus Quest 2

А это важно, т.к. когда я пытался переделать демку с башней, она у меня просто начала тормозить, хотя, даже на Карборде работало же как-то через пень колоду. Думаю, всё дело в слишком детализированной земле. В конце я приложу APK, чтобы вы поняли, о какой тупке я говорю)

Потому, когда вы поставите свое приложение, у вас возникнет вопрос, тянет его Квест или нет (а там может быть 35 FPS, хотя будет казаться, что все 90). У нас есть для этого внутренний инструмент Окулкуса, который можно активировать двумя способами.

Активируем OVR Metrics на шлеме

Эта штука дает нам, например,  глянуть, в каком разрешении работают экраны, сколько оперативной и видео-памяти занято и свободно и т.п. Вам понадобится вот эта софтина, OVR Metrics Tool. Там скачивается архив и дальше из него достаем апк-шку и ставим через СайдКвест (ну или выше описанным мной методом).

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

Мой мини-обзор:

Интересный факт: по дефолту Oculus Quest 2 работает с разрешением 1440 (ширина) и 1584 (высота) пикселей на глаз, можете проверить. Товарищ на Реддите ставил заявленные 1832*1920 и некоторые игры начинали тормозить…

Про Oculus Developer Hub

Это такая штука, которая в теории должна облегчать жизнь разработчику.

Скачать, инструкция на английском, но там всё просто.

Качаете софтину, подрубаете шлем кабелем к ПК, даете внутри шлема все нужные разрешения, когда оно спросит и после этого у вас на ПК можно будет:

  1. Стримить видео со шлема;
  2. Делать скрины со шлема;
  3. Видеть состояние шлем — заряд, заряд контроллеров, загрузка железа и т.п.
  4. Можно ставить приложения через эту софтину, но, работает только по кабелю. Для этого нужно перетащить ваш APK в зону с приложениями из неизвестных источнчинков.

Так же, эту штуку можно заставить работать по Wi-Fi, если установить галочку вот тут:

Активируем Wi-Fi для ODH

Ну и из нее же можно делать настойку оверлея для OVR Metrics, про который я писал выше.

ВАЖНО: всё глючное и сырое. Оверлей в шлеме может зависать, может не отображаться, до перезагрузки шлема и т.п. Будьте готовы к этому. Те же приложения через ODH по вайфаю у меня ставиться отказались, так что, я остался на способе FTP -> Файл менеджер.

Но, кому-то эта штука может пригодиться.

Полезные ссылки

Здесь кое-что, может вам пригодиться.

  • Стартовая статья, с которой мы начали, после нее вы сможете сделать своё первое приложение с шариком;
  • Установка пакета Oculus на Unity;
  • ВидеоКурс из 11-ти бесплатных уроков от Oculus и Unity, после которого вы сделаете свою первую игру в стиле «выберись из комнаты» (англ.);
  • Стартовая статья на сайте Oculus про разработку под Oculus Quest (по сути, это главная всего раздела про разработку);
  • Магазин ассетов Unity (но он так же доступен и в самом приложении Unity, из него мы ставили пакет Oculus);
  • Простой и полезный первый урок по Unity на YouTube, из него вы узнаете основы интерфейса, как перемещаться по сцене и т.п.

Для начала этого более чем достаточно.

Мои примеры

Немного демок, чтобы вы глянули, что должно получаться.

Пример с шариком

Уже было, но напомню еще раз, это то, что у вас должно выйти после первой статьи:

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

Скачать APK файл (29 Мб.)

Темная Башня

Которая не смогла. Точнее, землю я перенести смог из старого проекта, но, уже увидев, что оно не тянет, понял, что лучше не продолжать:

И вышла она не тёмной, а белой, т.к. без текстур

Если подойти к краю, там хорошо видно, что шлем начинает подтормаживать. Если у вас активирован оверлей овр-метрики, то там будет 35 FPS. Далее, я пробовал еще деревья добавить, это был ад, 1-5 FPS, с большим трудом вообще вышел из приложения без перезагрузки.

Скачать APK файл (24 Мб.)

Демка со слоном и мышом

Еще с лета остались модельки, и я решил пустить их в ход. Если что, для импорта из Blender нужно, чтобы сам файл блендера лежал у вас в ассетах проекта. Тогда его будет видно и в окне в Unity и вы сможете использовать модельки оттуда. Но, материалы всё равно придется делать уже в Unity.

В данном случае, пол сделан как раз с помощью нескольких карт, потому так круто смотрится, а ведь по факту — одна плоскоть! Слава PBR!

Модельки остались еще с прошлого изучения Blender, вполне себе пригодились для демонтсрацци.

Скачать APK файл (35 Мб.)

Что дальше (подводя итог)

А дальше думаю, как всегда, немного поколупаю и пойду заниматься чем-то еще, как это часто бывает. Т.к. есть вопросы, ответы на которые найти непросто, да и лень искать. Это же был стартовый пост, который вполне может пригодиться вам для быстрого начала в изучении разработки под Oculus Quest.

Другие интересные статьи про Oculus Quest 2:

С вами был @Pavel419., до новых постов!