我有一个在 Android Cardboard 和 Oculus Go 上运行的 Unity 游戏。我正在尝试确定 Go 的控制器是否已连接。
我从 Unity 资产商店导入了 Oculus 集成包(尽管我不确定它是否真的需要……我的印象是,至少从 2018.3 开始,Oculus 支持就已经内置到 Unity 中,如果不是 2018.2 或更早版本的话)。我还删除了 Cardboard,并在播放器设置中添加了 Oculus 作为虚拟现实 SDK。
以下代码在初始化我的大部分游戏的 Start() 方法中执行:
void Start() {
// ...
if (OVRInput.IsControllerConnected(OVRInput.Controller.RTrackedRemote)) {
// do something visible
}
// ...
}
问题是, OVRInput.IsControllerConnected(...)总是返回 false,并且块内的代码永远不会执行。
我尝试过的其他事情:
将对 OVRInput.IsControllerConnected() 的调用从 Start() 移至 Update(),以防万一这是初始化时间问题。没有成功。结果相同。
我没有使用 OVRInput.Controller.RTrackedRemote 作为参数,而是尝试了其他对象... LTrackedRemote、Active、All、Gamepad、LTouch、RTouch、Remote、Touch、Touchpad 和 None。除了 '.None' 之外,所有这些都返回 false。'.None' 返回真。
我在调用 OVRInput.IsControllerConnected() 的行上设置了一个断点(在将其移动到 Update() 之后),然后在 VS2017 的即时窗口中调用 OVRInput.GetConnectedControllers() ......它返回“无”。OVRInput.GetActiveController() 同上。
游戏本身是从 Android Cardboard 开始的。到目前为止,我对其所做的唯一重大更改是:
从 Unity 的资源商店导入 Oculus 支持库。
在 Player -> XR Settings 中,我删除了“Cardboard”并将“Oculus”添加为 VR SDK
在构建设置中,我将构建方法从“Gradle”更改为“内部”(Gradle 构建失败......我已经看到 2018 年夏天的帖子说这是一个 Unity 错误,但我不确定这是否仍然是当前信息。 ..无论如何,从 Gradle 更改为 Internal 使该错误消失)。
最值得注意的是,我没有添加任何 Oculus 特定的预制件,或更改/删除任何 GoogleVR 特定的预制件。