几个月前,我使用Unity(2018.2)和C#编写了适用于Android Cardboard的VR国际象棋游戏。 (https://pawnslaught.com)。我现在想使用Unity 2018.3(到今天为止是2018.3.8)对Oculus Go进行增强。
当前,它使用按常规层次结构排列的GvrReticlePointer处理选择:
Empty GameObject named CameraContainer that positions the camera in the scene
standard Unity camera named MainCamera with attached GvrPointerPhysicsRaycaster
GvrReticlePointer prefab.
在这一点上,我主要想增加对Go的Oculus指针的支持(以便用户可以将虚拟激光指向棋盘上的所需正方形,而不必用标线板查看)和72hz帧速率。
我真的很不想将游戏分为两个不同的Unity项目(一个用于Cardboard,一个用于Oculus Mobile)。理想情况下,我更希望Unity构建一个.apk,该.apk可以在从具有Cardboard查看器的随机Android手机到具有GearVR或Oculus Go / Quest的三星手机上运行的所有东西上运行:
在非Oculus平台上启动时,以“纸板”模式运行,而忽略并隐藏与Oculus相关的所有内容。
在Oculus Mobile平台(包括Go和GearVR)上启动时,默认情况下以增强的“ Oculus”模式运行...但是如果用户确实希望能够切换到通用Android Cardboard模式(例如,如果用户拥有被检测为“支持GearVR的”三星Android手机,但该用户只有可用的Cardboard耳机)。
但是...如果确实需要,我可以忍受分别构建“ Android Cardboard”和“ Oculus Mobile”版本。
从一些明显的问题开始...
我是否只是将“ Oculus”添加为目标(Unity 2018.3)XR API,并继续对Cardboard和Oculus使用相同的相机,还是需要使用Oculus专用相机预制件之一(作为当前MainCamera的同级产品),并且在编辑器中同时禁用了两者,并在运行时启用了其中一个?
我是否必须显式地使用条件编译来使所有使用Oculus API的代码远离非Oculus的设备,或者仅使用运行时逻辑来确定是否可以调用Oculus库?无论哪种方式...我该怎么做?
如果我必须必须为Cardboard和Oculus Mobile建立单独的目标,我该怎么做?据我所知,就构建设置而言,它们都是platform = Android。同样,我看到了如何在Player的XR设置下添加Virtual Reality SDK,但是我没有看到任何明显的方法来告诉Unity:“如果我以Cardboard为目标,请使用这组特定设置,以及这组不同的设置如果我的目标是Oculus”。
是否有必须使用Unity的内部构建系统而不是Gradle的已知解决方案,或者这是一个已知的问题,没有人可以做任何事情?回到去年秋天我最初使用Unity 2018.2.9-14为Cardboard编写游戏时,我使用Gradle作为构建系统,但是当我在2018.3.8中打开项目并添加Oculus作为平台后尝试构建它时,Gradle进行构建开始失败。我从去年夏天的某个帖子中发现了“使用内部构建系统,Unity仍然不能使用Gradle为Go进行构建”的提示。
我浏览了Oculus.com上的文档,但它们主要是让我感到困惑,因为它们似乎都解决了“ Oculus Rift + Oculus Mobile的跨平台”或“(非Unity)Android本机+(非-Unity)Oculus Mobile”。
请注意,这不是“如何在Unity项目中使用{Oculus-specific API}”问题……这是“如何使用Unity定位两个相关平台,在单个Unity项目中,其中一个基本上是另一个的超集。