javascript - 在运行时设置相机位置与导航网格发生碰撞

标签 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);
      });

最佳答案

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

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

否则,如果您移动得太快,将您保持在导航网格内的计算会将您传送回来(在基元示例中似乎如此)。

摆弄原语 here .
摆弄你的东西here

关于javascript - 在运行时设置相机位置与导航网格发生碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058442/

相关文章:

javascript - JS绘制一个箭头从一个div指向另一个

javascript - A 帧 : how to change image using javascript

html - A 框架检查器工具在 Glitch 中几乎没有任何功能

javascript - 在 RegExp 中使用可变长度后视删除前导空格

html - FireFox 中的表格呈现不正确

javascript - 如何修改工具提示内容字体大小?

javascript - Aframe a-sky 旋转未更新

javascript - 页面加载时执行 JQuery 函数,而不是在 .keyup 上执行

javascript - 使用 angularjs 将多个独立附件上传到 couchdb

javascript - 平均堆栈 : Cannot read property 'companyTitle' of undefined