假设我有一个圆柱模型加载到我的webvr场景中。如何使对象固定?即用户(摄像机视图)不能占据对象内的任何位置或移动“通过”对象。我怎样才能做到这一点?
<a-scene>
<a-assets>
<a-asset-item id="cube-obj" src="cube.obj"></a-asset-item>
</a-assets>
<a-entity id="cameraWrapper" position="0 2 10" rotation="0 0 0">
<a-camera near="0.1" user-height="0" id="camera" listener></a-camera>
</a-entity>
<a-entity obj-model="obj: #cube-obj; mtl: #cube-mtl" scale="1 1 1" rotation="-90 0 0"></a-entity>
<a-plane position="0 4 4" rotation="-90 0 -90" width="4" height="4" color="#7BC8A4"></a-plane>
<a-sky color="#ECECEC"></a-sky>
</a-scene>
答案 0 :(得分:3)
这取决于您计划支持的设备以及您允许用户使用的设备 导航你的场景。对于大多数VR体验,请遵循最佳实践 将相机按比例移动到用户的动作。如果用户步骤 在房间空间中向前移动并且相机被阻挡,&#34;这是非常糟糕的 经验。对于大多数VR应用来说,做运动更好 teleportation, 设计你的场景,以阻止障碍,或探索更多的创意 将用户带入世界的方式。
使用游戏手柄或WASD控件或VR场景进行非VR桌面体验 相机在车内,你可以添加一个 physics engine来 防止通过障碍物移动。
^ 我会尽快将其添加到A-Frame FAQ或文档中。这已添加到A-Frame FAQ。这是example using checkpoints和example using a physics engine。
答案 1 :(得分:0)
由于我登陆这里是为了寻找一个更简单的答案(而不是处理自定义,而是标准的AFrame对象),所以也许这不是您想要的。但是,如果您只是要求“防止摄像机穿过AFrame对象”,也许这会对您有所帮助。
在下面的示例中,我使用AFrame Physics System来管理物理。
我已经从AFrame Extras复制了translationsqueue
组件,并将其命名为kinematic-body
(请参见嵌入式脚本),因为它被标记为“已弃用”,因此将来可能会消失。 / p>
您将看到如何在场景中移动,但是当到达某个对象时,您将无法在其中移动。这在台式机和Oculus Go中都对我有效。诀窍很简单:相机内置在kinema-body
装备中,对象(平面和盒子)是kinema-body
。当static-body
碰到kinema-body
时,它会停止(或者,或者根据它的移动方式尝试在其周围移动)。
static-body