【问题标题】:Setting camera position at runtime collides with navmesh在运行时设置相机位置与 navmesh 冲突
【发布时间】:2019-07-16 13:30:49
【问题描述】:

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

我想提供一个快捷方式,用户可以在其中单击按钮并跳转到相应的楼层。到目前为止,位置的改变是有效的,但是一旦玩家开始行走,他们就会被拉回到他们在点击按钮之前所处的相同的 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);
      });

【问题讨论】:

    标签: javascript html aframe virtual-reality


    【解决方案1】:

    当'传送'时,你需要重置导航数据:

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

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

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

    【讨论】:

    • @L.Maher 很高兴我能帮上忙 :)
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2014-03-20
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多