OVRInput.IsControllerConnected()

时间:2019-03-24 22:51:47

标签: c# unity3d oculusgo

我有一个可以在Android Cardboard和Oculus Go上运行的Unity游戏。我正在尝试确定Go的控制器是否已连接。

我从Unity资产商店导入了Oculus集成包(尽管我不确定它是否确实需要...我给人的印象是,至少从2018.3(如果不是2018.2或以后)起,Oculus支持便已内置到Unity中。之前)。我还删除了Cardboard,并在播放器设置中将Oculus添加为Virtual Reality 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”返回true。

  • 我在调用OVRInput.IsControllerConnected()的行上设置了一个断点(将其移动到Update()之后),然后在VS2017的即时窗口中调用了OVRInput.GetConnectedControllers()...它返回“ None”。同上OVRInput.GetActiveController()。

游戏本身始于Android Cardboard。到目前为止,我对此所做的唯一主要更改是:

  • 从Unity的资源商店导入Oculus支持库。

  • 在Player-> XR设置中,我删除了“ Cardboard”,并添加了“ Oculus”作为VR SDK

  • 在“构建设置”中,我将构建方法从“ Gradle”更改为“ Internal”(Gradle构建失败...我从2018年夏季开始看到过帖子说这是Unity错误,但我不确定是否仍然是当前信息...无论如何,从Gradle更改为Internal都会使该错误消失)。

最值得注意的是,我还没有添加任何Oculus特定的预制件,也没有更改/删除任何GoogleVR特定的预制件。

1 个答案:

答案 0 :(得分:1)

我知道您曾尝试将IsControllerConnected移至Update,但在一秒钟后是否尝试在Update 中使用GetConnectedControllers ?那就是我的诀窍。所以在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;                
                }
        }