使用aframe和aframe-physics-system我已经注意到了一个问题,其中" dynamic-body"正在通过一个简单的基于Collada的"静体"。
所有的动态身体应该在蓝色的地板上弹跳,但在我的情况下,除了球体之外的所有物体都会从地板上掉下来。我不确定为什么。
这是jsfiddle示例: https://jsfiddle.net/9z9e1jtk/
<a-scene fog="type: linear; color: #FFEBDE; far:195" >
<a-assets>
<a-asset-item id="ground" src="https://cdn.rawgit.com/7ammer/testfiles/master/aframe-ground-physics/floor.dae"></a-asset-item>
</a-assets>
<a-entity camera
universal-controls
jump-ability
kinematic-body
position="0 2 10">
</a-entity>
<a-box color="red"
dynamic-body
position="0 10 0"
height="4"></a-box>
<a-cylinder color="#ddb424"
position="-5 10 0"
dynamic-body></a-cylinder>
<a-sphere color="#ddb424"
position="5 5 0"
dynamic-body></a-sphere>
<a-entity static-body collada-model="#ground"></a-entity>
</a-scene>
答案 0 :(得分:1)
Aframe 0.9.0及更高版本不再支持Collada。在aframe-extras v.6.0.0及更高版本中为需要的人提供了支持。参考:https://github.com/aframevr/aframe/issues/3793
您可以使用gltf或aframe实体作为基础。
一个例子:
<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"></a-entity>
重要的是,您使用collision-filter
。这意味着您为您的实体及其应与之碰撞的每个实体声明一个组。使用group:name
和collidesWith: groupname
执行此操作。如果您想使其变得简单,则可以为每个应该发生碰撞的项目声明一个组。因此,您将组名设置为组1,并使其与组1冲突。
然后看起来像这样:
<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"
collision-filter="group: group1; collidesWith: group1"></a-entity>
您的其他实体(例如多维数据集或gltf模型)需要获取相同的标签。
<a-box collision-filter="group: group1; collidesWith: group1"> </a-box>
要使其变得更加简单,只需声明一个a-mixin元标记并将其传递给应具有碰撞功能的每个项目即可:
<a-mixin id="collision" dynamic-body collision-filter="group: group1; collidesWith: group1"></a-mixin>
<a-box mixin="collision"></a-box>
<a-entity id="ground" geometry="primitive: plane; height: 500; width: 500" material=" opacity:0.0" position="0 0 0" static-body rotation="90 0 0"
mixin="collision"></a-entity>
使用gltf模型进行相同的操作(内联示例):
<a-entity dynamic-body gltf-model="url(url/to/gltfmodel.gltf)" mixin="collision"></a-entity>
答案 1 :(得分:0)
我知道我要晚2年了,但请尝试在球体内应用辅助平面以充当更好的物理对撞机。我将使平面大于球体,然后将不透明度设置为0%。