0

我有一个在 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 特定的预制件。

4

1 回答 1

1

我知道您尝试将 IsControllerConnected 移动到 Update 但您是否在一秒钟后尝试 GetConnectedControllers in Update ?这就是我的诀窍。所以在更新()中:

        // initialize hand once after one second of start
        if(!handInitialised){
                initialWait += Time.deltaTime;
                if(initialWait > 1f){
                    OVRInput.Controller c = OVRInput.GetConnectedControllers();
                    if(c == OVRInput.Controller.LTrackedRemote || c == OVRInput.Controller.LTouch){
                        //
                    }
                    //
                    handInitialised = true;                
                }
        }
于 2019-03-26T17:17:45.720 回答