AFrame内置了很多很酷的东西,比如支持游戏手柄等控制器。在他们的文档中,他们推荐使用组件 "跟踪控制" 然后根据浏览器的可用情况选择正确的设备组件。当我在aframe v1.0.4的桌面模式下,这个功能似乎完全不起作用。
我使用的是
直接查询浏览器gamepad api的时候可以找到gamepad。
我这样声明我的实体。<a-entity mycomponent tracked-controls></a-entity>
然后我就可以看到那个框架 然后把它转化为: <a-entity mycomponent tracked-controls-webxr></a-entity>
文档中解释的那样。
在我的自定义组件中 mycomponent
然后我想听一下游戏手柄的事件,像这样。
events: {
"controllerconnected": function () {
log.info("controllerconnected");
},
"buttonchanged": function () {
log.info("buttonchanged");
}
},
但我从来没能得到这些事件。
所以我深入研究了一下源代码,看看什么时候aframe会附加它的内部游戏手柄事件监听器,据我所知,这一切都归结为对变量的依赖。isWebXRAvailable
在桌面模式下,并且存在组件 tracked-controls-webxr
.
var isWebXRAvailable = module.exports.isWebXRAvailable = !window.debug && navigator.xr !== undefined;
那 !window.debug
将排除几乎所有的桌面浏览器?
那么我的问题是,在桌面模式下是否应该支持游戏板?或者说我完全没有注意到如何使用这个功能,如果是这样的话,请给我指明正确的方向:)
tracked-controls是为空间跟踪控件设计的,比如VR头盔提供的Vive Wands或Oculus Touch。没有对传统游戏手柄的开箱支持。你可以使用Gamepad API来手动集成,或者看一看 运动控制