我有以下激光控制代码,当摄像机在进入VR模式后直视前方时,它们处于完美位置。
<a-entity position="0.25 1.25 -0.2" class="laser-controls">
<a-entity laser-controls="hand: right" line="color: red"></a-entity></a-entity>
问题是:当我旋转头部(相机)时,我想让控件顺利地跟随我的头部旋转(我有一些代码,看看旋转是否大于110度)。我不希望控制器成为摄像机的一部分,因为它们应该保持自己的独立旋转。我喜欢的是Oculus Home(Gear VR)中控制器模型的行为。
我如何实现这一点是我的自定义组件,让我们说我的tick函数,每两秒调用一次(该代码已经运行)。
谢谢!
答案 0 :(得分:0)
如何使用getAttribute()
检查相机组件和激光控制实体的旋转?然后你可以检查差异是否超过110度:
let angle = laser.getAttribute('rotation');
if (camera.getAttribute('rotation').y - laser.getAttribute('rotation').y>110){
angle.y++;
laser.setAttribute('rotation',angle);
} else if(camera.getAttribute('rotation').y - laser.getAttribute('rotation').y<-110){
angle.y--;
laser.setAttribute('rotation',angle);
}
<强>更新强>
如果您想将控制器放在靠近头部的位置您可以:
1.而不是angle.y++/--
将其更改为相机的旋转。您也可以将其x / y位置更改为靠近相机(如camera.position.x + 0.5)
2.但以上是即时的,如果你想让它平滑,你可以使用动画组件,当增量度> 110度时,设置动画属性移动到相机组件位置/旋转,发出开始事件,禁用旋转检查,侦听动画结束事件,并启用检查。有点像这样:
init: function(){
this.check = true;
let check = this.check;
animationel.addEventListener('animationend',function(){
check = true;
});
},tick(){
if(this.check){
if(rotationCheck()){
this.check = false;
}
}
}