我有一个可以在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特定的预制件。
答案 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;
}
}