我刚刚在A-Frame场景中将激光指针添加到右手,并指向错误的方向。
A-frame Laser pointing 45deg to the left
在此图像中,我使用Oculus Touch控制器指向塔上方的蓝色框。正如你所看到的那只手正确指向并感觉它与我现实生活中的手部位置相当匹配,但是激光的左侧约为45度。
这是我的代码:
<a-entity id="cameraRig" position="-25 -10 138" rotation="0 -25 0">
<a-entity id="head" camera="near: 0.1; far: 10000" wasd-controls look-controls></a-entity>
<a-entity id="teleHand" hand-controls="left" teleport-controls="cameraRig: #cameraRig; teleportOrigin: #head; type: parabolic; button: trigger; collisionEntities: #terrain, #bridgeFull"></a-entity>
<a-entity id="pointerHand" hand-controls="right" laser-controls></a-entity>
有没有办法可以重新定位激光?理想情况下,从指向fingure出来,但如果没有,那么只是指向正确的方向会吗?
更新:我刚尝试了raycaster="showLine: true"
,这确实指向了正确的方向,因此它似乎是激光组件的错误。我可以使用raycaster并编写我自己的碰撞逻辑,但更喜欢使用激光器获得的鼠标事件。
第二次更新:刚刚发现,如果我同时添加了raycaster和游标组件,我将获得与添加激光组件完全相同的功能,但是光线投射指向正确的方向。
这解决了我遇到的问题,但是我会在这里留下这个问题,因为我确信其他人会遇到这个问题,直到激光器组件被修复。
我在这里提出了一个问题https://github.com/aframevr/aframe/issues/3396
为清楚起见,我使用的是A-frame的v0.7.1
答案 0 :(得分:0)
好的,所以在这里发布答案。 hand-controls
和laser-controls
无意混在一起。如果你想支持3DoF和6DoF,手控制更多用于6DoF,激光控制更多。激光控制将在controllerconnected
事件中设置自己的raycaster属性。
设置您自己的raycaster属性:
AFRAME.registerComponent('force-raycaster', {
schema: {
direction: {type: 'vec3'},
origin: {type: 'vec3'}
},
init: function () {
this.el.addEventListener('controllerconnected', {
// Wait for laser-controls to set its raycaster properties.
setTimeout(() {
this.el.setAttribute('raycaster', this.data);
}, 50);
});
}
});
<a-entity laser-controls hand-controls force-raycaster="direction: 0 0 -1; origin: 0 -0.1 0">