在运行时设置相机位置会与navmesh冲突

时间:2019-07-16 13:30:49

标签: javascript html aframe virtual-reality

我正在研究三层楼的公寓。导航约束是通过覆盖每个楼层(包括楼梯)的导航网格完成的。

我想提供一个快捷方式,用户可以单击一个按钮并跳到相应的楼层。到目前为止,位置的改变是可行的,但是一旦玩家开始走路,他们就会被拉回到与单击按钮之前相同的Y位置(x和z位置改变有效)。例如,从一楼跳到三楼的方法是可行的,但是一旦玩家开始走路,他们就会再次回到一楼。

position.set值不是随机选择的–我在装货检查器中检查了camRig在三楼的位置并使用了这些值,因此我不确定为什么这不起作用。有什么办法可以避免这个问题?

编辑:我举了一个简短的例子来重现该问题:https://glitch.com/~fearless-resolution

这是我的代码:

    <a-entity id="camRig" 
               movement-controls="speed: 0.3; 
               constrainToNavMesh: true" 
               position="-12.5 0 -2" 
               rotation="0 270 0">
      <a-entity id="cam" camera 
              look-controls="pointerLockEnabled: true;" 
              position="0 2.4 0"></a-entity>
    </a-entity>

<a-entity id="navmesh" gltf-model="#collider" nav-mesh position="0 0 0" scale="1.6 1.6 1.6" visible=„false“></a-entity>
<a-entity id="house" gltf-model="#apartment" position="0 0 0" scale="0.016 0.016 0.016"></a-entity>



document.querySelector("#changeFloorButton").addEventListener('click', function() {
          document.querySelector("#camRig").object3D.position.set(-1, 4, 2);
      });

1 个答案:

答案 0 :(得分:1)

“传送”时,您需要重置导航数据:

// provided player has the camRig
player.components['movement-controls'].updateNavLocation()

否则,如果您移动得太快,那么将使您保持在导航网格中的计算会将您传送回去(在原始示例中似乎如此)。

用原语here修饰。
摆弄你的东西here