Справочная информация:
Несколько месяцев назад я использовал Unity (2018.2) и C # для написания VR-шахматной игры для Android Cardboard.(https://pawnslaught.com). Теперь я хочу улучшить его для Oculus Go, используя Unity 2018.3 (2018.3.8, на сегодняшний день).
В настоящее время он обрабатывает выделение с помощью GvrReticlePointer, упорядоченного в обычной иерархии:
Empty GameObject named CameraContainer that positions the camera in the scene
standard Unity camera named MainCamera with attached GvrPointerPhysicsRaycaster
GvrReticlePointer prefab.
На данный момент я в основном хочу добавить поддержку указателя Oculus Го (чтобы пользователь мог направить виртуальный лазер на нужный квадрат на шахматной доске вместо того, чтобы смотреть на него с помощьюсетка) и частота кадров 72 Гц.
Я действительно, очень не хочу разбивать игру на два разных проекта Unity (один для картона, другой для Oculus Mobile). В идеале, я бы предпочел построить Unityодин .apk, который может работать на любом устройстве, от случайного телефона Android с картографическим просмотром до телефона Samsung с GearVR или Oculus Go / Quest:
При запуске на платформе, отличной от Oculus,работать в режиме «Картон» и просто игнорировать и скрывать все, что связано с Oculus.
При запуске на платформе Oculus Mobile (включая Go и GearVR), десбой в работе в расширенном режиме «Oculus» ... но он может переключиться в обычный режим Android Cardboard, если пользователь действительно этого хочет (скажем, если у пользователя есть телефон Samsung Android, который распознается как «GearVR-совместимый»,но у пользователя есть только картонная гарнитура).
ОДНАКО ... Я мог бы смириться с необходимостью создавать версии "Android Cardboard" и "Oculus Mobile" отдельно, если бы у меня действительно былок.
Какой хороший способ достичь этого?
Начиная с некоторых очевидных вопросов ...
Я просто добавляю "Oculus" какцелевого (Unity 2018.3) XR API и продолжайте использовать одну и ту же камеру как для картона, так и для Oculus, или мне нужно использовать один из префабов камеры для Oculus (как брат текущей основной камеры), и оба отключены в редактореи включить один или другой во время выполнения?
Должен ли я явно использовать условную компиляцию, чтобы держать любой код, использующий API Oculus, подальше от устройств?не Oculus, или достаточно просто использовать логику времени выполнения, чтобы решить, нормально ли вызывать библиотеку Oculus?И так или иначе ... как мне это сделать?
Если я делаю должен построить отдельные цели для картона и Oculus Mobile, как мне это сделать?Насколько я могу судить, они обе платформы = Android, если говорить о настройках сборки.Кроме того, я вижу, как я могу добавить SDK Virtual Reality в настройках XR проигрывателя, но я не вижу очевидного способа сказать Unity: «Используйте этот набор конкретных настроек, если я нацеливаюсь на Картон, и этот другой набор настроекесли я нацеливаюсь на Oculus ".
Есть ли какое-либо известное решение для использования внутренней системы сборки Unity вместо Gradle, или это просто известная проблема, с которой никто ничего не может сделать?Когда я прошлой осенью писал игру для картона с использованием Unity 2018.2.9-14, я использовал Gradle в качестве системы сборки, но когда я попытался собрать ее после открытия проекта в 2018.3.8 и добавления Oculus в качестве платформы, сборка Gradleначал терпеть неудачу.Я обнаружил подсказку «используйте внутреннюю систему сборки, Unity по-прежнему не может использовать Gradle для сборки для Go», опубликованную где-то прошлым летом.
Я просматривал документы в Oculus.com, но они в основном просто смутили меня, потому что все они, казалось, обращались либо к «кроссплатформенности для Oculus Rift + Oculus Mobile», либо к «(не-Unity) Android native + (не-Unity) Oculus Mobile».
Обратите внимание, что это , а не - это вопрос «Как использовать {Oculus-специфичный API} в проекте Unity»? Это вопрос «Как использовать Unity для нацеливания на две связанные платформы, однуиз которых в основном является надмножеством другого, в рамках одного проекта Unity ".